python请求头的奇怪行为

python请求头的奇怪行为,python,python-requests,Python,Python Requests,您能告诉我如何使下面的请求版本像urllib版本一样工作吗?我不知道出了什么问题。实际上,需要referer头,以便我的请求不会重定向到主页。urllib版本似乎能正确处理这个问题,然后我就可以下载这个文件了。重定向到主页的请求案例并非如此。似乎没有考虑referer标题,我被重定向到主页 谢谢 urllib版本 import urllib.request url = "http://www.truefx.com/dev/data/2017/MARCH-2017/EURUSD-2017-03.z

您能告诉我如何使下面的请求版本像urllib版本一样工作吗?我不知道出了什么问题。实际上,需要referer头,以便我的请求不会重定向到主页。urllib版本似乎能正确处理这个问题,然后我就可以下载这个文件了。重定向到主页的请求案例并非如此。似乎没有考虑referer标题,我被重定向到主页

谢谢

urllib版本

import urllib.request
url = "http://www.truefx.com/dev/data/2017/MARCH-2017/EURUSD-2017-03.zip"
request = urllib.request.Request(url)
request.add_header('Referer', 'http://www.truefx.com/')
response = urllib.request.urlopen(request)
# Check for redirect
print("Final url:" + response.geturl())
print("Code: " + str(response.code))
print("File size: " + str(response.length))
输出:

> Final url:http://www.truefx.com/dev/data/2017/MARCH-2017/EURUSD-2017-03.zip
> Code: 200
> File size: 53041630
请求版本

url = "http://www.truefx.com/dev/data/2017/MARCH-2017/EURUSD-2017-03.zip"
headers = {"referer": "http://www.truefx.com/?page=download"}
r = requests.get(url, headers)
print(r.url)
print(r.status_code)
输出:

http://www.truefx.com
200

headers dict作为另一个参数传递。替换:

r = requests.get(url, headers)


解决了问题。

您在两个代码段中指定了完全不同的引用者。此外,您在
请求中使用了
标题
作为查询参数dict,而不是标题。感谢用户2357112!推荐人之间的差异不是问题所在,但正如你所说,我的标题没有成功添加。替换为:r=请求。get(url,headers=headers,stream=True)解决了这个问题。
r = requests.get(url, headers=headers)