使用Azure REST API连接Power BI与Python时遇站点无法访问问题
我用以下代码通过Microsoft Azure的REST API将Power BI与Python连接,但运行文件时页面显示“This site can’t be reached”。
注:出于隐私考虑,此处已将client_id和client_secret替换为****
生成配置文件的代码
from configparser import ConfigParser # initialize the config parser config= ConfigParser() # add section to config file config.add_section('power_bi_app') config.set('power_bi_app','client_id','****') config.set('power_bi_app','client_secret','****') config.set('power_bi_app','redirect_uri','https://localhost/redirect') # write to a config.ini file with open(file='configs/config.ini',mode='w+') as f: config.write(f)
初始化Power BI客户端的代码
from pprint import pprint from configparser import ConfigParser from powerbi.client import PowerBiClient config=ConfigParser() config.read('configs/config.ini') client_id = config.get('power_bi_app','client_id') client_secret = config.get('power_bi_app','client_secret') redirect_uri = config.get('power_bi_app','redirect_uri') #initialize the powerbi client power_bi_client = PowerBiClient( client_id=client_id, client_secret=client_secret, scope=['https://analysis.windows.net/powerbi/api/.default'], redirect_uri=redirect_uri, credentials='configs/power_bi_state.jsonc' )
可能的解决方法
修正重定向URI配置
当前使用的https://localhost/redirect存在两个问题:一是本地localhost默认没有SSL证书,浏览器会直接拒绝连接;二是未指定端口,默认80端口可能被占用或未开放。建议改成http://localhost:8080/redirect,同时必须在Azure AD应用注册的重定向URI列表中完全添加这个地址(协议、端口、路径要完全一致)。确认认证模式匹配
你设置的/.defaultscope是客户端凭据模式(无需用户登录)的专用参数,这种模式下不需要重定向URI,也不会弹出浏览器页面。如果你的powerbi.client库默认采用授权码模式(需要用户登录跳转),则scope应改为具体权限,比如['https://analysis.windows.net/powerbi/api/Workspace.Read.All', 'Report.Read.All'],同时需要启动本地服务监听重定向URI的端口(比如用Flask写个简单接口接收回调)。检查本地端口状态
若指定了端口(比如8080),用netstat -ano | findstr :8080(Windows)或lsof -i :8080(Mac/Linux)检查端口是否被占用,若被占用更换一个未使用的端口即可。验证文件路径与权限
确认configs/config.ini和configs/power_bi_state.jsonc的路径正确,程序有读写这些文件的权限,避免因配置读取失败导致认证流程异常。
内容的提问来源于stack exchange,提问作者Chaïmaa

