2017-04-16 9 views
2

私のDBに格納されているいくつかのURLが有効なリンクかどうかを確認しようとしています。これを達成するために、私はページの内容全体をダウンロードするのを避けるために、HEADステータスを要求するためにhttplib2を使用しています。私はその結果にとても満足していました。HEADとGET http要求が同じURLの異なるステータスコードを返す

しかし、HEADリクエストを使用したときに返されるステータスコードは、GETリクエストで返されたものと似ていない場合があります。

だから、ちょうどライブラリのバグの場合には、私が別のライブラリといくつかのテストを行った(以下の私の「リクエスト」libのテストです):

> import requests  

> rg = requests.get("https://fr.news.yahoo.com/chemin-dames-l-hommage-personnel-pr%C3%A9sident-121005844.html") 
> rh = requests.head("https://fr.news.yahoo.com/chemin-dames-l-hommage-personnel-pr%C3%A9sident-121005844.html") 

> print("GET status code:", rg.status_code) 
    ('GET status code:', 200) 

> print("HEAD status code:", rh.status_code) 
    ('HEAD status code:', 404) 

しかし、何libに私が使用して、私はまだ持っています別のGET &同じURLのHEADステータス。

サイト管理者はHEAD要求とGET要求の両方で同一のステータスコードを返さないことにしました。これは推奨されていなくても正当だと思われます。

この問題を回避し、確認する必要のある2百万のURLのコンテンツ全体をダウンロードすることなく、リンクが有効かどうかを知る方法はありますか?

HEADリクエストで400を超えるステータスコードが返された場合は、GETリクエストで再確認できますが、それは私にとっては汚い仕事のようです。

答えて

2

これはGET方法で行う必要があるようです。 HEAD になりますが、ページが公開されている場合は200に戻りますが、それは保証されておらず、実装方法はサーバーによって異なります。また、いくつかは、そのHEAD要求仕様は、単純に言う404を返すべき主張するだろう。この程度404:

要求が

を拒否された理由を正確に明らかにし、サーバーが を希望しない場合は、このステータスコードは一般的に使用されます

また、サーバー実装に存在する可能性があるすべてのエラーと間違いを考慮する必要があります。シンプルなgoogle検索では、この種のバグの数が表示されます。 HEADは200を返しますが、GETは404なので、二重チェックの推奨方法 HEAD 404sはGETリクエストで100%信頼できるものではありません。

関連する問題