我正在尝试下载此zip file。 zip文件通过chrome正确下载,但因使用请求或urllib而导致400 Bad Request错误失败。
>> 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'
我尝试过的事情(失败了):
欺骗User-Agent标头。
使用请求会话持久化Cookie
答案 0 :(得分:0)
从网址中删除无关的/ ..它适用于浏览器,因为浏览器会为您规范化网址。没有/ ..这适用于urllib或请求。
答案 1 :(得分:0)
Chrome和Firefox删除“..”因此请求的有效网址为
http://prd-enforce-xfr-02.dol.gov/data_catalog/EBSA/ebsa_ocats_20150703.csv.zip
删除请求中的..,它应该可以正常工作。