使用Python Requests添加自定义请求头后出现重定向循环的原因排查
问题:添加自定义请求头后调用Google接口出现重定向循环错误
直接调用requests.get('https://google.com')可正常运行,但添加自定义请求头后触发requests.exceptions.TooManyRedirects: Exceeded 30 redirects.错误,相关代码如下:
import requests s = requests.Session() s.headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "Accept-Encoding": "gzip, deflate", "Accept-Language": "en-US,en", "Host": "google.com", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", "X-Amzn-Trace-Id": "Root=1-63261f60-6a62c4934cad2e126b4bdd8c" } s.get('https://google.com')
问题原因分析
- 硬编码Host头引发循环:手动设置
Host: google.com后,Google服务器返回的重定向目标(比如www.google.com或地区专属域名)会被Session忽略,每次请求依然带着固定的google.comHost头,服务器判定请求不符合要求,持续返回重定向,形成循环。 - 无关请求头干扰:
X-Amzn-Trace-Id是AWS的追踪标识,不属于浏览器正常请求头,Google服务器识别后可能触发额外验证逻辑,加重重定向问题。 - 覆盖默认请求头丢失适配逻辑:直接给
s.headers赋值会覆盖Requests Session默认的请求头配置,默认情况下Session会在重定向时自动调整头信息,自定义头破坏了这个机制,导致每次重定向都重复错误的头参数。
解决建议
- 移除手动设置的
Host头,让Requests根据请求URL自动生成正确的Host值,重定向时会自动更新。 - 删除无关的
X-Amzn-Trace-Id头,保持请求头贴近真实浏览器的正常配置。 - 使用
headers.update()方法添加自定义头,保留Session默认的必要头信息:
import requests s = requests.Session() custom_headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "Accept-Encoding": "gzip, deflate", "Accept-Language": "en-US,en", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" } s.headers.update(custom_headers) s.get('https://google.com')
内容的提问来源于stack exchange,提问作者octaliscaee
相关产品推荐
相关产品推荐

