답변:
편집 :이 답변은 작동하지만 요즘에는 아래 다른 답변에서 언급 한 것처럼 요청 라이브러리를 사용해야합니다 .
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 요청을 수행하는 데 사용할 수 있습니다. urllib2는 URL을 호스트 이름과 경로로 분할하는 대신 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 리디렉션 만 비활성화 할 수 있습니다. 예 : head request no redirect
다만:
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
. (당신이 사용하고자하는 경우 즉, 그것은 작동합니다하지만 나쁜 스타일이고 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은 urlparse
-와 함께 입력 측의 URL을 다룰 때 httplib
편안함을 제공합니다 urllib2
.
제쳐두고, httplib를 사용할 때 (최소한 2.5.2에서) HEAD 요청의 응답을 읽으려고 시도하면 (readline에서) 차단되고 실패합니다. 응답에서 읽기를 실행하지 않으면 연결에서 다른 요청을 보낼 수 없으므로 새 요청을 열어야합니다. 또는 요청 사이에 긴 지연을 허용하십시오.
httplib가 urllib2보다 약간 빠르다는 것을 발견했습니다. 하나는 httplib를 사용하고 다른 하나는 urllib2를 사용하는 두 프로그램의 시간을 측정했습니다. HEAD 요청을 10,000 개의 URL로 보냅니다. 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는 일반적으로 직접 사용되지 않습니다.