python请求-在重定向时删除头
我正在使用python请求库对应用程序进行http检查。我有一种情况,我需要在请求上发送一个初始主机头,但在执行导致问题的重定向时不应使用此方法 我已经查看了请求文档,但是我看不到一种方法,可以让请求在执行重定向时删除请求头 这是我的问题的一个例子python请求-在重定向时删除头,python,http,redirect,http-headers,python-requests,Python,Http,Redirect,Http Headers,Python Requests,我正在使用python请求库对应用程序进行http检查。我有一种情况,我需要在请求上发送一个初始主机头,但在执行导致问题的重定向时不应使用此方法 我已经查看了请求文档,但是我看不到一种方法,可以让请求在执行重定向时删除请求头 这是我的问题的一个例子 import requests from requests.structures import CaseInsensitiveDict s = requests.Session() request_headers = CaseInsensitive
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将重定向到,但陷入循环,因为即使在重定向之后,它仍会将主机头集发送到“google.co.uk”
我总是需要在第一次请求时使用手动主机头,因为这需要通过CDN,CDN使用头来确定它所服务的站点。从初始请求中删除它不是一个选项
下面是一个等效的curl,它在初始请求之后确实会删除主机头。这是我希望从Python请求中看到/期望的行为
curl -H "Host: google.co.uk" http://google.co.uk -L -o /dev/null
curl不会删除主机头。它发送第二个请求,标题为
主机:www.google.co.uk
(根据重定向指向的URL创建)
正如ZhongYu所写的,您不需要指定主机头。因此,如果您的目标只是下载页面,那么解决方案就是省略标题
参数:
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)
很晚才答复。我只是偶然发现了这篇文章,想找些别的东西。 它可能会帮助寻找答案的人 查看请求“钩子”机制,您可以在响应返回时指定回调(每个响应将调用您的钩子):
在回调中,您可以删除/修改/添加标题(可以是盲目的,也可以是状态代码为3xx或…。库应自动设置
Host
标题。如果没有,那就是库中的一个bug。您不必显式地设置它。它将由库设置,但我只需要为第一个请求显式地设置它。我想删除此标题以用于任何后续重定向