如何在Python Playwright中拦截指定临时重定向并添加自定义Header?
问题:Playwright能否捕获/拦截临时重定向并添加自定义Header?
我有一个页面,初始请求会返回303状态码,之后会触发多个状态码为307的临时重定向。我需要拦截其中一个临时重定向,添加自定义Header后再发送请求,但尝试使用handle_request()的方法无法捕获这些由重定向触发的请求,代码如下:
def handle_request(route, request): # Update the headers if match_string is present in url if "match_string" in request.url: print(f"Modifying headers for redirected request: {request.url}") headers = {**request.headers, 'custom_header_1': 'value_!23'} route.continue_(headers=headers) else: # Continue the request without modification route.continue_()
请问是否有可行的处理方法?
解决方案
核心问题
默认情况下,handle_request()无法拦截重定向链中的后续请求——浏览器自动处理重定向时,这些内部跳转的请求不会触发常规的request拦截逻辑。
实现方法
通过page.route()拦截所有请求(包括重定向产生的请求),结合URL匹配或重定向来源追踪定位目标请求,再修改Header:
基础实现代码
from playwright.sync_api import sync_playwright def handle_route(route, request): # 匹配目标重定向请求的URL特征 if "match_string" in request.url: print(f"拦截到目标重定向请求: {request.url}") # 复制原有请求头并添加自定义Header updated_headers = {**request.headers, "custom_header_1": "value_!23"} route.continue_(headers=updated_headers) else: # 无修改继续请求 route.continue_() with sync_playwright() as p: browser = p.chromium.launch(headless=False) page = browser.new_page() # 拦截所有请求,覆盖重定向链中的每一步 page.route("**/*", handle_route) page.goto("你的初始页面URL") browser.close()
进阶:通过重定向来源精准定位
如果需要锁定特定重定向链中的请求,可以利用request.redirected_from属性追踪请求来源:
def handle_route(route, request): # 判断当前请求是否来自初始303重定向,且是目标307重定向 if (request.redirected_from and "初始请求的URL特征" in request.redirected_from.url and "match_string" in request.url): updated_headers = {**request.headers, "custom_header_1": "value_!23"} route.continue_(headers=updated_headers) else: route.continue_()
内容的提问来源于stack exchange,提问作者Ashok Kumar
相关产品推荐
相关产品推荐

