2017-01-09 18 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ヘッダーの を含むメタ情報は、GET要求に応答して送信された情報に同じ と同じである必要があります(SHOULD)。 このメソッドは、 要求によって暗示されたエンティティに関するメタ情報を取得するために、エンティティ本体自体を転送することなく使用することができます。このメソッドは、有効性、アクセシビリティ、 および最近の変更についてハイパーテキストリンクをテストするためによく使用される です。例えば

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

通常、この種のものにはGETではなくHEADメソッドを使用します。 Web上のいくつかのランダムなサーバーに照会すると、矛盾した結果を返すように構成されている可能性があります(これは登録が必要なサーバーでは一般的です)。そのような場合は、わずかなバイト数のダウンロードには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']) 
関連する問題