実際、urllib2はHTTP HEAD要求を行うことができます。
上記の@retoは、urllib2にHEAD要求を行う方法を示しています。ここで
は、それが私の感想です:
import urllib2
# Derive from Request class and override get_method to allow a HEAD request.
class HeadRequest(urllib2.Request):
def get_method(self):
return "HEAD"
myurl = 'http://bit.ly/doFeT'
request = HeadRequest(myurl)
try:
response = urllib2.urlopen(request)
response_headers = response.info()
# This will just display all the dictionary key-value pairs. Replace this
# line with something useful.
response_headers.dict
except urllib2.HTTPError, e:
# Prints the HTTP Status code of the response but only if there was a
# problem.
print ("Error code: %s" % e.code)
あなたがWiresharkのネットワークプロトコルanalazerのようなものでこれを確認した場合、あなたはそれが実際にではなくGETよりも、HEADリクエストを送信していることがわかります。
これはWiresharkのにより捕捉されるように、上記のコードからのHTTPリクエストとレスポンスである:
HEAD/doFeT HTTP/1.1
は受け入れ-エンコーディング:同一
ホスト: bit.ly
接続:閉じます
ユーザエージェント:Python-urllib/2。7
HTTP/1.1 301は
サーバー移動:nginxの
日:日、2012年2月19日午後01時20分56秒GMT
のContent-Type:text/htmlのを。 charset = utf-8
キャッシュ制御:プライベート。 MAX-年齢= 90
場所: http://www.kidsidebyside.org/?p=445
MIME-バージョン:1.0
のContent-Length:127
接続:クローズ
のSet-Cookie: _bit = 4f40f738-00153-02ed0-421cf10a;ドメイン= .bit.ly。 expires = Fri Aug 17 13:20:56 2012; path = /;他の質問のコメントの1で述べたように、当該URLがリダイレクトが含まれている場合HttpOnlyの
はしかし、その後、urllib2のが先ではなく、HEADにGETリクエストを行います。 HEADリクエストだけを本当にしたい場合、これは大きな欠点になる可能性があります。
上記のリクエストにはリダイレクトが含まれます。
GET/2009/05 /来-とドロー・サークル・オブ・ユニティと-US/HTTP/1.1
のAccept-エンコード:ここでのWiresharkで撮影して目的地への要求は、あります:アイデンティティ
ホスト:www.kidsidebyside.org
接続:クローズ
のUser-Agent:Pythonの-urllibは/ 2.7
urllib2のを使用する代わりにジョー・グレゴリオのhttplib2ライブラリを使用することです:
import httplib2
url = "http://bit.ly/doFeT"
http_interface = httplib2.Http()
try:
response, content = http_interface.request(url, method="HEAD")
print ("Response status: %d - %s" % (response.status, response.reason))
# This will just display all the dictionary key-value pairs. Replace this
# line with something useful.
response.__dict__
except httplib2.ServerNotFoundError, e:
print (e.message)
これは、最初のHTTP要求と宛先URLへのリダイレクト要求の両方にHEAD要求を使用する利点があります。
HEAD/doFeT HTTP/1.1
ホスト::bit.ly
受け入れエンコード:gzipで、 を収縮
ユーザーエージェント:Pythonの-httplib2/0.7.2(gzipの
は、ここで最初のリクエストです)
ここで、第2の要求は、先にいます:
HEAD/2009/05 /来-とドロー-circle・オブ・ユニティと-US/HTTP/1.1
ホスト:www.kidsidebyside.org
受け入れる-encodingを:GZIPを、
ユーザーエージェントを収縮:Pythonの-httplib2/0.7.2(GZIP)
*** Python 3注意***まず、 'response.info().headers'のようなものはありません。' dict(response.info()) 'を実行してください。次に、HTTPステータスコードに対して 'response.status'を実行します。 – treecoder
**これは**ヘッダーのみを取得するか**ヘッダーのみを**印刷するかですか? –
'headers'はどこに文書化されていますか?また、キー値dictを返す 'response.info()。items()'の使用を検討してください。 –