GET请求在Postman上有效,但在Python中无效

42fyovps  于 2023-10-18  发布在  Postman
关注(0)|答案(4)|浏览(328)

我有一个简单的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

dwthyt8l

dwthyt8l1#

仅使用“User-Agent”标头:在Python代码中,您不需要单独指定'host'头。“host”头通常由requests库自动处理。从代码中删除'host'头:

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'

}
使用'--location'标志等效:cURL中的'--location'标志自动跟随重定向。在Python代码中,可以使用allow_redirects参数来实现相同的行为:

response = requests.get(url, headers=headers, data=payload, allow_redirects=True)

在你的Python代码中尝试这些调整:

import requests
url = "https://www.expedia.com/"

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'
}

response = requests.get(url, headers=headers, allow_redirects=True)

print(response.status_code)
hrirmatl

hrirmatl2#

看看response.text,你被屏蔽了

urllib似乎可以工作,

import urllib.request as request

url = "https://www.expedia.com/"
response = request.urlopen(url)
print(response.status) # 200
zsohkypk

zsohkypk3#

如果一个请求在Postman中有效,而另一个在Python(或其他)中无效,那么请求显然是不同的(因为HTTP是无状态的)。因此,我建议检查您发送的确切内容并比较请求。例如,您可以使用Responsler来执行此操作。只需选择一个主机名,然后从Postman和Python发送一个请求。你可以直接看到差异。

chy5wohz

chy5wohz4#

更新您的请求库。最新版本是2.31.0。

相关问题