Kre*_*air 8 python redirect urllib2 head
我可以使用urllib2来生成HEAD请求,如下所示:
import urllib2
request = urllib2.Request('http://example.com')
request.get_method = lambda: 'HEAD'
urllib2.urlopen(request)
Run Code Online (Sandbox Code Playgroud)
问题是,当重定向后,它会使用GET而不是HEAD.
此HEAD请求的目的是检查我即将下载的URL的大小和内容类型,以便我可以确保不下载一些大文档.(URL由随机互联网用户通过IRC提供).
如何在重定向后使用HEAD请求?
jte*_*ace 13
您可以使用请求库执行此操作:
>>> import requests
>>> r = requests.head('http://github.com', allow_redirects=True)
>>> r
<Response [200]>
>>> r.history
[<Response [301]>]
>>> r.url
u'https://github.com/'
Run Code Online (Sandbox Code Playgroud)
好问题!如果您决定使用urllib2,您将需要查看有关构建您自己的重定向处理程序的答案。
简而言之(阅读:公然从之前的答案中窃取):
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
Run Code Online (Sandbox Code Playgroud)
此外,正如勘误表中提到的,您可以使用 Python Requests。