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

Playwright中set_extra_http_headers方法失效问题求助

问题分析与解决方案

核心问题点

  1. 异步方法未加await:context.set_extra_http_headers和page.set_extra_http_headers都是异步方法,必须通过await等待执行完成,否则设置逻辑不会生效——这是你最初尝试context设置无效的直接原因。
  2. 请求头获取方式错误:page.request并非page.goto(url)发起的目标请求对象,且该属性在goto完成前可能未正确初始化,导致你打印结果为空。

修正后的代码示例

async def navigate_page(self, url, headers):
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        
        # 推荐:创建context时直接传入headers(全局生效)
        context = await browser.new_context(extra_http_headers=headers)
        
        # 或者用await调用set方法(必须加await)
        # await context.set_extra_http_headers(headers)
        
        page = await context.new_page()
        
        # 若仅需当前页面生效,用page的set方法(同样要加await)
        # await page.set_extra_http_headers(headers)
        
        # 获取goto对应的响应和请求对象
        response = await page.goto(url)
        target_request = response.request
        
        # 打印正确的请求头
        print(target_request.headers)
        
        page_content = await page.content()
        await browser.close()
        return page_content

额外技巧:拦截特定请求

如果需要避免重定向干扰,确保获取的是目标URL的请求,可以用page.wait_for_request:

async def navigate_page(self, url, headers):
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        context = await browser.new_context(extra_http_headers=headers)
        page = await context.new_page()
        
        # 预先等待目标请求
        request_promise = page.wait_for_request(lambda req: req.url == url)
        await page.goto(url)
        target_request = await request_promise
        
        print(target_request.headers)
        
        page_content = await page.content()
        await browser.close()
        return page_content

注意事项

  • Headers的键值对必须都是字符串类型,你的{'referer': 'some url'}格式是正确的。
  • Playwright会自动处理HTTP头的大小写规范,无需手动调整(比如referer会被转为符合标准的Referer)。

内容的提问来源于stack exchange,提问作者Curious miss Pythonist'a

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:40:20