我可以使用urllib2来生成HEAD请求,如下所示:
import urllib2
request = urllib2.Request('http://example.com')
request.get_method = lambda: 'HEAD'
urllib2.urlopen(request)
问题在于,当重定向后,它会使用GET而不是HEAD。
此HEAD请求的目的是检查我即将下载的URL的大小和内容类型,以便我可以确保不下载某些大文档。 (该URL由随机互联网用户通过IRC提供)。
如何在重定向后使用HEAD请求?
答案 0 :(得分:13)
您可以使用requests库执行此操作:
>>> import requests
>>> r = requests.head('http://github.com', allow_redirects=True)
>>> r
<Response [200]>
>>> r.history
[<Response [301]>]
>>> r.url
u'https://github.com/'
答案 1 :(得分:3)
好问题!如果您已开始使用urllib2
,则需要查看this answer有关构建您自己的重定向处理程序的信息。
简而言之(阅读:从前一个答案公然被盗):
import urllib2
#redirect_handler = urllib2.HTTPRedirectHandler()
class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_302(self, req, fp, code, msg, headers):
print "Cookie Manip Right Here"
return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)
http_error_301 = http_error_303 = http_error_307 = http_error_302
cookieprocessor = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(MyHTTPRedirectHandler, cookieprocessor)
urllib2.install_opener(opener)
response =urllib2.urlopen("WHEREEVER")
print response.read()
print cookieprocessor.cookiejar
此外,如勘误表中所述,您可以使用Python Requests。