回答:
編集する:この回答は機能しますが、現在は、以下の他の回答で述べられているように、リクエストライブラリを使用する必要があります。
使用する httplibをます。
>>> import httplib
>>> conn = httplib.HTTPConnection("www.google.com")
>>> conn.request("HEAD", "/index.html")
>>> res = conn.getresponse()
>>> print res.status, res.reason
200 OK
>>> print res.getheaders()
[('content-length', '0'), ('expires', '-1'), ('server', 'gws'), ('cache-control', 'private, max-age=0'), ('date', 'Sat, 20 Sep 2008 06:43:36 GMT'), ('content-type', 'text/html; charset=ISO-8859-1')]
getheader(name)
特定のヘッダーを取得するもあります。
urlparse
手元にあると便利です。これは、ランクの低い応答で示されます。
httplib
はに名前が変更されましたhttp.client
。
requests
デフォルトではPythonに同梱されていません。
urllib2を使用して、HEADリクエストを実行できます。これは、URLをホスト名とパスに分割する代わりにurllib2がURLを解析するため、httplibを使用するよりも少し優れています。
>>> import urllib2
>>> class HeadRequest(urllib2.Request):
... def get_method(self):
... return "HEAD"
...
>>> response = urllib2.urlopen(HeadRequest("http://google.com/index.html"))
ヘッダーは以前と同様にresponse.info()を介して利用できます。興味深いことに、リダイレクトされたURLを見つけることができます。
>>> print response.geturl()
http://www.google.com.au/index.html
httplib.HTTPConnection
リダイレクトを自動的に処理しないの利点です。
Requestsライブラリにも言及する必要があると思います。
allow_redirects
POST / PUT / DELETEリダイレクトのみを無効にできます。例:ヘッドリクエストリダイレクトなし
ただ:
import urllib2
request = urllib2.Request('http://localhost:8080')
request.get_method = lambda : 'HEAD'
response = urllib2.urlopen(request)
response.info().gettype()
編集:httplib2:Dがあることに気づきました
import httplib2
h = httplib2.Http()
resp = h.request("http://www.google.com", 'HEAD')
assert resp[0]['status'] == 200
assert resp[0]['content-type'] == 'text/html'
...
request
。(Viz、動作しますが、スタイルが悪く、使用self
したい場合-難しいです。)
完全を期すために、httplibを使用して受け入れられた回答と同等のPython3回答を得るます。
これは、ライブラリがhttplibではなくhttp.clientと呼ばれているだけで、基本的に同じコードです。
from http.client import HTTPConnection
conn = HTTPConnection('www.google.com')
conn.request('HEAD', '/index.html')
res = conn.getresponse()
print(res.status, res.reason)
import httplib
import urlparse
def unshorten_url(url):
parsed = urlparse.urlparse(url)
h = httplib.HTTPConnection(parsed.netloc)
h.request('HEAD', parsed.path)
response = h.getresponse()
if response.status/100 == 3 and response.getheader('Location'):
return response.getheader('Location')
else:
return url
import
ですか?+1は、入力側でURLを処理するときに、urlparse
と一緒にhttplib
の快適さurllib2
を提供します。
余談ですが、httplib(少なくとも2.5.2)を使用している場合、HEADリクエストの応答を読み取ろうとすると(readlineで)ブロックされ、その後失敗します。応答でreadを発行しない場合、接続で別の要求を送信することができないため、新しい要求を開く必要があります。または、リクエスト間の長い遅延を受け入れます。
httplibはurllib2よりもわずかに速いことがわかりました。2つのプログラムの時間を計った-1つはhttplibを使用し、もう1つはurllib2を使用して、10,000のURLにHEADリクエストを送信した。httplibは数分高速でした。 httplibの合計統計は次のとおりです。実際の6m21.334sユーザー0m2.124s sys 0m16.372s
そしてurllib2の合計統計は次のとおりです:実際の9m1.380sユーザー0m16.666s sys 0m28.565s
他に誰かがこれについて意見を持っていますか?
おそらくもっと簡単です:urllibまたはurllib2を使用してください。
>>> import urllib
>>> f = urllib.urlopen('http://google.com')
>>> f.info().gettype()
'text/html'
f.info()は辞書のようなオブジェクトなので、f.info()['content-type']などを実行できます。
http://docs.python.org/library/urllib.html
http://docs.python.org/library/urllib2.html
http://docs.python.org/library/httplib.html
ドキュメントでは、httplibは通常直接使用されないことに注意してください。