You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:40:18