我正在尋找能夠自動從Bureau of Transportation Statistics Carrier Website下載.zip
文件的腳本,但我無法獲得相同的響應標頭,因爲我可以在Chrome中看到我下載了zip文件。我期待得到一個響應頭,看起來像這樣:Python請求不返回與瀏覽器請求相同的標頭/ cURL
HTTP/1.1 302 Object moved
Cache-Control: private
Content-Length: 183
Content-Type: text/html
Location: http://tsdata.bts.gov/103627300_T_T100_SEGMENT_ALL_CARRIER.zip
Server: Microsoft-IIS/8.5
X-Powered-By: ASP.NET
Date: Thu, 21 Apr 2016 15:56:31 GMT
然而,我可以在Chrome網絡檢查員看到我正在以下響應相同的信息調用requests.post(url, data=params, headers=headers)
時:
>>> res.headers
{'Cache-Control': 'private', 'Content-Length': '262', 'Content-Type': 'text/html', 'X-Powered-By': 'ASP.NET', 'Date': 'Thu, 21 Apr 2016 20:16:26 GMT', 'Server': 'Microsoft-IIS/8.5'}
它幾乎所有東西除了它缺少Location
密鑰,我需要爲了下載.zip
文件與我想要的所有數據。 也Content-Length
價值是不同的,但我不知道如果這是一個問題。
我認爲我的問題與事實有關,當您點擊頁面上的「下載」時,它實際上會發送兩個我可以在Chrome網絡控制檯中看到的請求。第一個請求是一個POST
請求,產生一個HTTP
響應302,然後在響應頭中有Location
。第二個請求是對響應頭的Location
值中指定的url的GET
請求。
我真的應該在這裏發送兩個請求嗎?爲什麼我沒有像在瀏覽器中那樣使用requests
獲得相同的響應頭? FWIW我用curl -X POST -d /*my data*/
和回來這在我的終端:
<head><title>Object moved</title></head>
<body><h1>Object Moved</h1>This object may be found <a HREF="http://tsdata.bts.gov/103714760_T_T100_SEGMENT_ALL_CARRIER.zip">here</a>.</body>
非常感謝所有幫助!
我能夠通過使用'subprocess' Python模塊獲取數據。如果有一種方法可以通過'requests'完成,我仍然很感興趣。 –