簡體   English   中英

python urllib /請求無法下載文件,但瀏覽器可以

[英]python urllib / requests fails to download file but browser does

我正在嘗試下載此zip文件 該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

從網址中刪除多余的/..。 它在瀏覽器中有效,因為瀏覽器會為您標准化URL。 如果沒有/ ..,則可以與urllib或請求一起使用。

Chrome和Firefox刪除了“ ..”,因此請求的有效網址是

http://prd-enforce-xfr-02.dol.gov/data_catalog/EBSA/ebsa_ocats_20150703.csv.zip

刪除您的請求中的..,它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM