python urllib/requests无法下载文件,但浏览器无法下载

python urllib/requests无法下载文件,但浏览器无法下载,python,python-requests,urllib,Python,Python Requests,Urllib,我正在下载这个。 zip文件通过chrome正确下载,但使用requests或urllib时出现400错误请求失败 >> import requests >> import urllib >> url = 'http://prd-enforce-xfr-02.dol.gov/../data_catalog/EBSA/ebsa_ocats_20150703.csv.zip' >> r = requests.get(url) >> r.o

我正在下载这个。 zip文件通过chrome正确下载,但使用requests或urllib时出现400错误请求失败

>> import requests
>> import urllib

>> url = 'http://prd-enforce-xfr-02.dol.gov/../data_catalog/EBSA/ebsa_ocats_20150703.csv.zip'
>> r = requests.get(url)
>> r.ok
False
>> r.headers
{'content-length': '254', 'content-encoding': 'gzip', 'vary': 'Accept-Encoding', 'server': 'Apache/2.2.14 (Ubuntu)', 'connection': 'close', 'date': 'Tue, 07 Jul 2015 20:39:55 GMT', 'content-type': 'text/html; charset=iso-8859-1'}
>> r
<Response [400]>
>> r.text
u'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n<html><head>\n<title>400 Bad Request</title>\n</head><body>\n<h1>Bad Request</h1>\n<p>Your browser sent a request that this server could not understand.<br />\n</p>\n<hr>\n<address>Apache/2.2.14 (Ubuntu) Server at prd-enforce-xfr-02.dol.gov Port 80</address>\n</body></html>\n'

>> z = urllib.urlopen(url)
>> z.read()
'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n<html><head>\n<title>400 Bad Request</title>\n</head><body>\n<h1>Bad Request</h1>\n<p>Your browser sent a request that this server could not understand.<br />\n</p>\n<hr>\n<address>Apache/2.2.14 (Ubuntu) Server at prd-enforce-xfr-02.dol.gov Port 80</address>\n</body></html>\n'
导入请求 >>导入URL库 >>url='1〕http://prd-enforce-xfr-02.dol.gov/../data_catalog/EBSA/ebsa_ocats_20150703.csv.zip' >>r=请求。获取(url) >>好的 假的 >>r.headers {'content-length':'254','content-encoding':'gzip','vary':'Accept-encoding','server':'Apache/2.2.14(Ubuntu','connection':'close','date':'Tue,Jul 2015 20:39:55 GMT','content-type':'text/html;charset=iso-8859-1'} >>r >>r.text u'\n\n400错误请求\n\n错误请求\n您的浏览器发送了一个此服务器无法理解的请求。
\n

\n
\nApache/2.2.14(Ubuntu)服务器位于prd-enforce-xfr-02.dol.gov端口80\n\n >>z=urllib.urlopen(url) >>z.读() “\n\n400错误请求\n\n错误请求\n您的浏览器发送了一个此服务器无法理解的请求。
\n

\n
\nApache/2.2.14(Ubuntu)服务器位于prd-enforce-xfr-02.dol.gov端口80\n\n” 我尝试过(但失败了)的事情:

  • 欺骗用户代理标头

  • 通过使用请求会话持久化cookie


.

移除多余的/。。从url。它在浏览器中工作,因为浏览器为您标准化URL。没有/。。这可以很好地处理urllib或请求

Chrome和Firefox删除“.”,因此请求的有效URL是

http://prd-enforce-xfr-02.dol.gov/data_catalog/EBSA/ebsa_ocats_20150703.csv.zip
移除。。在你的要求和它应该工作