Python实现打开浏览器手动登录后读取地址栏URL获取eBay API刷新令牌
实现方案
你当前使用的urllib仅会发起后台HTTP请求,不会唤起浏览器图形界面,也无法支持手动登录交互,可采用OAuth流程通用的本地服务监听方案实现需求。
实现逻辑
- 调用Python内置
webbrowser模块唤起系统默认浏览器打开eBay授权URL - 提前在eBay开发者后台将应用回调地址配置为本地端口地址,比如
http://localhost:8080/callback - 启动本地临时HTTP服务监听回调端口,用户完成登录授权后,eBay会自动跳转到配置的本地回调地址,本地服务即可直接捕获跳转后的完整URL
可直接运行的示例代码
import webbrowser from http.server import HTTPServer, BaseHTTPRequestHandler from urllib.parse import parse_qs, urlparse # 替换为你自己的eBay授权URL AUTH_URL = "https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.co.uk/&ec=GAZAmgQ" # 回调配置需与eBay开发者后台填写的回调地址完全一致 CALLBACK_PORT = 8080 CALLBACK_PATH = "/callback" full_redirect_url = "" auth_code = "" class CallbackRequestHandler(BaseHTTPRequestHandler): # 关闭默认的控制台日志输出,不需要可以删掉这行 def log_message(self, format, *args): pass def do_GET(self): global full_redirect_url, auth_code full_redirect_url = f"http://localhost:{CALLBACK_PORT}{self.path}" # 匹配回调地址 if self.path.startswith(CALLBACK_PATH): # 从URL参数中提取授权码 query_params = parse_qs(urlparse(self.path).query) if "code" in query_params: auth_code = query_params["code"][0] # 返回成功提示给浏览器 self.send_response(200) self.send_header("Content-Type", "text/html;charset=utf-8") self.end_headers() self.wfile.write("<h1>授权成功,可关闭当前页面</h1>".encode("utf-8")) return self.send_response(404) self.end_headers() if __name__ == "__main__": # 唤起浏览器打开授权页 webbrowser.open(AUTH_URL) print("请在弹出的浏览器页面中完成登录授权") # 启动本地服务监听回调 server = HTTPServer(("0.0.0.0", CALLBACK_PORT), CallbackRequestHandler) # 只处理一次请求后自动停止服务 server.handle_request() # 输出结果 print(f"跳转后完整URL:{full_redirect_url}") if auth_code: print(f"提取到的授权码:{auth_code}") # 后续可使用该授权码调用eBay接口兑换refresh token
注意事项
- 必须先在eBay开发者后台的应用配置页,将回调地址修改为和代码中一致的
http://localhost:8080/callback,否则eBay不会跳转至本地服务 - 若8080端口被占用,可更换为其他空闲端口,同步修改代码和后台回调配置即可
内容的提问来源于stack exchange,提问作者user12918986
相关产品推荐
相关产品推荐

