我有一个简单的GET请求,只有2个头,它在 Postman 上工作得很好。但是当我用Curl或Python3.9尝试同样的方法时,它不起作用。有没有人能帮我弄清楚Python到底有什么问题?
这是 curl -这对 Postman 很好-响应是200
curl --location 'https://www.expedia.com/' \
--header 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
下面是Python 3.9代码:回复429
import requests
url = "https://www.expedia.com/"
payload = {}
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36',
'host':'www.expedia.com'
}
response = requests.get(url, headers=headers, data=payload)
print(response.status_code)
我也用c#做过同样的尝试,它像魔术一样工作-响应200
4条答案
按热度按时间dwthyt8l1#
仅使用“User-Agent”标头:在Python代码中,您不需要单独指定'host'头。“host”头通常由requests库自动处理。从代码中删除'host'头:
}
使用'--location'标志等效:cURL中的'--location'标志自动跟随重定向。在Python代码中,可以使用allow_redirects参数来实现相同的行为:
在你的Python代码中尝试这些调整:
hrirmatl2#
看看
response.text
,你被屏蔽了urllib
似乎可以工作,zsohkypk3#
如果一个请求在Postman中有效,而另一个在Python(或其他)中无效,那么请求显然是不同的(因为HTTP是无状态的)。因此,我建议检查您发送的确切内容并比较请求。例如,您可以使用Responsler来执行此操作。只需选择一个主机名,然后从Postman和Python发送一个请求。你可以直接看到差异。
chy5wohz4#
更新您的请求库。最新版本是2.31.0。