여기서 내가하려는 것은 주어진 URL의 헤더를 가져 와서 MIME 유형을 결정할 수 있도록하는 것입니다. http://somedomain/foo/
예를 들어 HTML 문서 또는 JPEG 이미지를 반환 하는지 확인하고 싶습니다 . 따라서 콘텐츠를 다운로드하지 않고도 MIME 유형을 읽을 수 있도록 HEAD 요청을 보내는 방법을 알아 내야합니다. 누구든지 이것을하는 쉬운 방법을 알고 있습니까?
답변
편집 :이 답변은 작동하지만 요즘에는 아래 다른 답변에서 언급 한 것처럼 요청 라이브러리를 사용해야합니다 .
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)
특정 헤더를 가져 오는 것도 있습니다 .
답변
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
답변
의무적 인 Requests
방법 :
import requests
resp = requests.head("http://www.google.com")
print resp.status_code, resp.text, resp.headers
답변
Requests 라이브러리도 언급되어야 한다고 생각합니다 .
답변
다만:
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'
...
답변
완전성을 위해 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