gpt4 book ai didi

python 请求 - 在重定向时删除 header

转载 作者:可可西里 更新时间:2023-11-01 17:36:25 25 4
gpt4 key购买 nike

我正在使用 python 请求库对应用程序进行一些 http 检查。我遇到一种情况,我需要在请求中发送初始主机 header ,但在跟随导致问题的重定向时不应该使用它。

我查看了请求文档,但我看不出有什么方法可以让请求在遵循重定向时删除请求 header 。

这是我的问题的一个例子

import requests
from requests.structures import CaseInsensitiveDict

s = requests.Session()
request_headers = CaseInsensitiveDict()
request_headers['host'] = 'google.co.uk'

response = s.get("http://google.co.uk",allow_redirects=True,headers=request_headers)

在这种情况下,google.co.uk 将重定向到 https://www.google.co.uk ,但会陷入循环,因为它会发送设置为“google.co.uk”的主机 header ,即使它遵循重定向也是如此。

我总是需要在第一次请求时使用手动主机 header ,因为这要通过 CDN,CDN 使用 header 来确定它所服务的站点。从初始请求中删除它不是一种选择。

这是一个等效的 curl,它会在初始请求后丢弃主机 header 。这是我希望从 Python 请求中看到/期望的行为

curl -H "Host: google.co.uk" http://google.co.uk -L -o /dev/null 

最佳答案

curl 不会删除主机 header 。它发送带有 header Host: www.google.co.uk 的第二个请求(根据重定向指向的 URL 创建)。

正如 ZhongYu 所写,您不需要指定 Host header 。因此,如果您的目标只是下载页面,解决方案就是省略 headers 参数:

 response = s.get("http://google.co.uk",allow_redirects=True)

但如果您的目标是检查一些 http,可能这就是解决方案:

import requests

resp = requests.get("http://google.co.uk",allow_redirects=False)
while resp.status_code == 301:
resp = requests.get(resp.headers['location'],allow_redirects=False)

关于python 请求 - 在重定向时删除 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30256388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com