首先,代码中有一些错误。
在每个getheadersonly请求上安装新的全局urlopener。 此URL用于urllib2.urlopen
请求两个HTTP以获取响应的两个不同属性。
urllib2. httpredirecthandler.http _ error _ 302的实现不是那么微不足道,从一开始就不知道如何防止重定向
基本上,必须了解所有处理程序都安装在要打开的程序中,以处理某些响应。 urllib2.HTTPRedirectHandler可以将某些HTTP代码重定向。 如果不想重定向,请不要向重定向器添加重定向器处理程序。 如果不想打开ftp链接,请不要添加ftp处理程序等。
它需要打开新程序,在其中添加urllib2.HTTPHandler (),将请求定制为“头”请求,传递给打开请求实例的程序,读取属性,然后关闭响应
classheadrequest (urllib2. request ) :
efget_method(self ) :
return 'HEAD '
defgetheadersonly(URL,redirections=True ) :
opener=urllib2.OpenerDirector (
opener.add _ handler (urllib2. httphandler () )
opener.add _ handler (urllib2. httpdefaulterrorhandler ()
if redirections:
# httperrorprocessormakeshttpredirecthandlerwork
opener.add _ handler (urllib2. httperrorprocessor ()
opener.add _ handler (urllib2. httpredirecthandler () )
try:
RES=opener.open (头请求(URL ) ) ) ) ) ) ) )。
except urllib2.HTTPError,res:
传球
res.close () )
return dict (代码=RES.code,headers=res.info ),finalurl=res.geturl ) )