如何在Python Requests中获取服务器返回的自定义响应头?
解决Requests无法获取自定义响应头的问题
嘿,我之前也踩过这个坑!用Python Requests库拿不到服务器返回的自定义响应头,通常逃不过这几个常见原因,咱们一步步来排查:
先排查自动重定向的坑
Requests默认会自动跟随3xx类的重定向请求,这时候你最终拿到的响应是最后一次跳转后的结果,而你的自定义响应头很可能只存在于最初的那个响应里。解决办法很简单,请求时禁用自动重定向:import requests response = requests.get("你的目标URL", allow_redirects=False) # 现在再检查response.headers里的内容确认自定义头是否在分块响应的Trailers里
如果服务器用了分块传输编码(Transfer-Encoding: chunked),并且把自定义头放在了响应的尾部Trailers里,那默认情况下response.headers是读取不到这些头的。你需要开启流模式,读完整个响应后再获取Trailers:response = requests.get("你的目标URL", stream=True) response.content # 必须先读取完所有响应内容,Trailers才会被解析 custom_headers = response.raw.trailers先验证服务器真的返回了这个头
别光盯着Requests的结果,先用更底层的工具确认服务器确实发送了这个自定义头。比如用curl命令:curl -v "你的目标URL"看输出里的响应头部分,如果curl也找不到这个头,那问题出在服务器端,和Requests无关。
检查头名的拼写与大小写
Requests的headers对象是不区分大小写的,但有时候我们可能会拼错头名(比如把X-Custom-Data写成X-Custome-Data)。保险起见,你可以遍历所有响应头来确认:for header_name, header_value in response.headers.items(): print(f"{header_name}: {header_value}")这样能把Requests解析到的所有头都列出来,避免漏找。
一般按这个顺序排查,就能找到问题所在啦!
内容的提问来源于stack exchange,提问作者redress
相关产品推荐
相关产品推荐

