使用Playwright的page.request.get时配置代理遇鉴权问题求助
Playwright中page.request.get的代理配置问题解决
问题原因
page.goto() 属于浏览器上下文(Browser Context)的页面操作,会自动继承上下文里配置的代理和认证信息;而 page.request.get() 调用的是API请求上下文(APIRequestContext),它默认是独立的HTTP客户端,不会自动复用浏览器上下文的代理配置,因此会出现407代理认证失败的错误。
正确解决方案
方法1:创建带代理配置的APIRequestContext
直接基于浏览器上下文创建一个继承代理配置的API请求上下文,用它来发送请求:
browser = playwright.chromium.launch(headless=False, slow_mo=1,) context = browser.new_context( proxy={"server": proxy_url}, http_credentials={"username": proxy_user, "password": proxy_password}, ) page = context.new_page() # 创建带有代理的API请求上下文 api_request_context = context.request.new_context( proxy={"server": proxy_url}, http_credentials={"username": proxy_user, "password": proxy_password} ) # 用这个上下文发送请求 response = api_request_context.get(pdf_url) # 保存PDF文件 with open("target.pdf", "wb") as f: f.write(response.body()) # 用完记得销毁上下文 api_request_context.dispose() browser.close()
方法2:显式传递代理配置到请求
如果不想单独创建API上下文,也可以在调用 page.request.get() 时同时传递代理参数和认证头:
import base64 auth = base64.b64encode(f"{proxy_user}:{proxy_password}".encode()).decode() response = page.request.get(pdf_url, proxy={"server": proxy_url}, headers={"Proxy-Authorization": f"Basic {auth}"} )
注意:部分代理服务器需要同时指定
proxy配置和Proxy-Authorization头才能完成认证。
额外提示
page.request是独立的HTTP客户端,和页面的网络环境完全隔离,不要默认认为它会复用浏览器上下文的代理设置。- 若代理服务器对请求头有严格要求,可以在创建API请求上下文时指定
user_agent参数,让请求头和页面保持一致,避免被拦截。
内容的提问来源于stack exchange,提问作者YQN
相关产品推荐
相关产品推荐

