2017-01-09 52 views
2

不知道這是否可能,但我想檢查一個HTTP請求的狀態碼到一個大文件而不下載它;我只想檢查它是否存在於服務器上。檢查一個大文件是否存在而不下載

是否可以使用Python的requests來做到這一點?我已經知道如何檢查狀態碼,但是我只能在文件下載完成後才能這樣做。

我想我問的是你可以發出一個GET請求,並在收到響應頭後立即停止它?

+0

也許[此帖](http://stackoverflow.com/questions/14392432/checking-a-file-existence-on- a-remote-ssh-server-using-python)可以幫助你。 –

+0

@ dot.Py使用'ssh'的子進程調用來檢查SSH服務器上是否存在文件...不一樣的情況,但是謝謝。 – Juicy

回答

2

使用requests.head(),這隻返回請求的頭部,而不是所有的內容,換句話說,它不會重新修正消息的正文,但是您可以從頭部獲取所有信息。

HEAD方法與GET相同,只是服務器不能在響應中返回消息主體 。 HTTP頭中包含 的元信息響應於HEAD請求應該與響應GET請求發送的信息相同 。 此方法可以用於獲取關於 請求隱含的實體的元信息,而無需傳輸實體主體本身。此方法是 經常用於測試超文本鏈接的有效性,可訪問性, 和最近的修改。

例如:

import requests 
url = 'http://lmsotfy.com/so.png' 
r = requests.head(url) 
r.headers 

出:

{'Content-Type': 'image/png', 'Content-Length': '6347', 'ETag': '"18cb-4f7c2f94011da"', 'Accept-Ranges': 'bytes', 'Date': 'Mon, 09 Jan 2017 11:23:53 GMT', 'Last-Modified': 'Thu, 24 Apr 2014 05:18:04 GMT', 'Server': 'Apache', 'Keep-Alive': 'timeout=2, max=100', 'Connection': 'Keep-Alive'} 

此代碼不下載畫面,但返回的圖片消息的報頭,其中包含的大小,類型,日期。如果圖片不存在,則不會有這樣的信息。

0

通常,您使用HEAD方法而不是GET來處理這類事情。如果您查詢網絡上的某個隨機服務器,請準備將其配置爲返回不一致的結果(這對於需要註冊的服務器而言通常是這樣)。在這種情況下,您可能希望使用帶有Range header的GET請求來僅下載少量字節。

0

使用HEAD方法。 例如urllib

import urllib.request 

response = urllib.request.urlopen(url) 
if response.getcode() == 200: 
    print(response.headers['content-length']) 

在你的情況與requests

import requests 

response = requests.head(url) 
if response.status_code == 200: 
    print(response.headers['content-length']) 
相關問題