系统winxp python 版本 2.6.6
用python 的urllib2模块做HTTP Basic Access Authentication 认证超过6次后抛出HTTPError
import urllib2
import os
import re
import time
userAgent="Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6"
routerUrl="http://192.168.1.1/"
routerUser="admin"
routerPasswd="XXXXXX"
routerTimeout=15
routerCount=0 #请求次数
fileName,fileExt=os.path.splitext(__file__)
def getRouterOpener():
password_mgr=urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password("tomato",routerUrl,routerUser,routerPasswd)
httpBasicAuthHandler=urllib2.HTTPBasicAuthHandler(password_mgr)
routerOpener=urllib2.build_opener(httpBasicAuthHandler)
routerOpener.addheaders = [('Referer',routerUrl),('User-agent', userAgent),("Cache-Control","max-age=0")]
return routerOpener
def disConnectRoute(routerOpener):
print u"正在关闭路由连接"
print u"路由连接关闭成功"
#print response.getcode()
def reConnectRoute(routerOpener):
print u"正在重新路由连接"
print u"路由连接连接成功"
def changeIp(routerOpener):
global routerCount
routerCount=routerCount+1
#disConnectRoute(routerOpener)
#reConnectRoute(routerOpener)
print "changeIp start",str(routerCount)
response=routerOpener.open(routerUrl,None,routerTimeout)
print "changeIp end"
#print response.read()
if __name__=="__main__":
routerOpener=getRouterOpener() #得到opener
#response=routerOpener.open(routerUrl,None,routerTimeout)
while(True):
try:
changeIp(routerOpener)
time.sleep(1)
except urllib2.HTTPError,e:
print e
os.system("pause")
except urllib2.URLError as reason:
print "reason",reason
except:
pass
os.system("pause")
因为要多次请求网页 所以用一个OpenerDirector 对象,当打开页面超过5次后 开始抛出HTTPError。
通过监听http发现 当 OpenerDirector对象open超过5个请求页面之后header中Authorization丢失 所以认证通不过。
进入urllib2.HTTPBasicAuthHandler类->http_error_401()->http_error_auth_reqed()后此方法在830行处判断if self.retried > 5: 则抛出HTTPError。self.retried 小于5则继续执行 在header中添Authorization。而在此类中并没有提供self.retried 恢复为0的方法。所以当OpenerDirector打开6个以上页面时self.retried则始终大于5,此时认证失败,所以抛出HTTPError
修复办法:。。。。。。
备注:参考 urllib2.AbstractDigestAuthHandler中reset_retry_count
分享到:
相关推荐
Python urllib urllib2 urllib模块安装说明
Python urllib urllib2 urllib模块
python入门基础教程:python的urllib2 模块解析.pptx
Python 网络爬虫开发 Python爬虫入门基础教程:Python的urllib2 模块解析 共6页.pptx
python 2.7 urllib2的详细使用教程
python urllib3 安装文件包
本文实例讲述了Python使用urllib2模块实现断点续传下载的方法。分享给大家供大家参考。具体分析如下: 在使用HTTP协议进行下载的时候只需要在头上设置一下Range的范围就可以进行断点续传下载,当然,首先服务器需要...
python urllib2模块实例简介.docx
pythonurllib2模块实例简介.pdf
正好Python有相关的模块,所以写了个程序来进行PDF文件的下载,顺便熟悉了Python的...通过结合Python的urllib模块和urllib2模块来实现自动下载。代码如下: test.py #!/usr/bin/python # -*- coding:utf-8 -*- impo
pythonurllib2模块实例简介文.pdf
python urllib3 requests
Python
一、最基础的应用 ...urllib2提供了request的类,可以让用户在发送请求前先构造一个request的对象,然后通过urllib2.urlopen方法来发送请求 import urllib2 url = r'http://www.baidu.com' req = urlli
urllib3 最新版本爬虫 whl安装包 python2-3可用 32位 可用