Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python请求-在重定向时删除头_Python_Http_Redirect_Http Headers_Python Requests - Fatal编程技术网

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

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

我正在使用python请求库对应用程序进行http检查。我有一种情况,我需要在请求上发送一个初始主机头,但在执行导致问题的重定向时不应使用此方法

我已经查看了请求文档,但是我看不到一种方法,可以让请求在执行重定向时删除请求头

这是我的问题的一个例子

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。您不必显式地设置它。它将由库设置,但我只需要为第一个请求显式地设置它。我想删除此标题以用于任何后续重定向