`
bnmcvzx
  • 浏览: 10252 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

python中urllib2模块 HTTPBasicAuthHandler认证 HTTPError bug

阅读更多

 系统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模块,但是内容部分却展示了requests库的安装过程。因此...

    Python urllib urllib模块

    4. **urllib2** (仅在Python 2.x中): 在Python 2.x中,urllib2模块提供了一个更高级的接口,包含了request、error和一些其他功能,比如处理HTTP基本认证、代理等。但在Python 3.x中,这些功能被整合到urllib.request...

    Python 网络爬虫开发 Python爬虫入门基础教程:Python的urllib2 模块解析 共6页.pptx

    Python 网络爬虫开发基础教程:Python 的 urllib2 模块解析 Python 网络爬虫开发是指使用 Python 语言来开发网络爬虫程序,以便从互联网上抓取有价值的数据。Python 的 urllib2 模块是 Python 的一个标准库,提供了...

    python urllib3

    urllib3提供了丰富的异常处理机制,例如`URLError`和`HTTPError`,用于捕获和处理请求过程中可能出现的问题。 7. **与其他库的集成** urllib3常与requests库结合使用,requests库在其内部使用了urllib3,提供了一...

    python入门基础教程:python的urllib2 模块解析.pptx

    python入门基础教程:python的urllib2 模块解析.pptx

    pythonurllib2模块实例简介文.pdf

    Python的urllib2模块是用于处理URL的工具集,它为开发者提供了强大的功能,包括打开网页、处理HTTP请求和响应、处理HTTP头、处理cookies、处理认证等。在这个实例简介中,我们将深入探讨urllib2模块的核心功能和使用...

    python urllib2模块实例简介.docx

    ### Python urllib2 模块详解 #### 一、引言 `urllib2` 是 Python 早期用于处理 URL 请求的标准库之一,在 Python 2.x 版本中广泛使用。随着 Python 3.x 的普及,该模块已被整合进 `urllib` 包中,并有所调整。...

    python模块urllib3.zip

    使用Python 3.x版本运行py文件时报错 No module named 'urllib3' 一开始参照网上的安装方法通过pip来安装,未成功pip install urllib3 后面找到了这个文件,分享给大家。 使用方法是下载解压后,cmd里切换到解压...

    pythonurllib2模块实例简介.pdf

    ### Python urllib2 模块详解 ...尽管 `urllib2` 在 Python 3.x 中已被拆分为 `urllib.request` 和 `urllib.error` 等多个模块,但其核心思想和用法仍然一致。希望本文能够帮助读者更好地理解和使用 `urllib2`。

    python 2.7 urllib2的详细使用教程

    python 2.7 urllib2的详细使用教程

    使用Python的urllib和urllib2模块制作爬虫的实例教程

    urllib 学习python完基础,有些迷茫.眼睛一闭,一种空白的窒息源源不断而来.还是缺少练习,遂拿爬虫来练练手.学习完斯巴达python爬虫课程后,将心得整理如下,供后续翻看.整篇笔记主要分以下几个部分: 1.做一个简单的...

    python urllib3 requests

    Python的urllib3和requests库是进行HTTP请求的两个常用工具,它们在Web开发、数据抓取、API交互等场景中扮演着重要角色。这里我们将深入探讨这两个库的特点、使用方法以及它们之间的区别。 首先,urllib3是Python的...

    【Python】Python的urllib模块、urllib2模块批量进行网页下载文件

    正好Python有相关的模块,所以写了个程序来进行PDF文件的下载,顺便熟悉了Python的...通过结合Python的urllib模块和urllib2模块来实现自动下载。代码如下: test.py #!/usr/bin/python # -*- coding:utf-8 -*- impo

    Python网络请求利器:深入探索`urllib`模块

    在Python中进行网络编程时,urllib模块是一个强大的工具,它提供了一套完整的API来处理URL和网络请求。urllib是Python标准库的一部分,它包括了多个子模块,如urllib.request、urllib.parse、urllib.error等,这些子...

    【图文】python入门基础教程:python的urllib2 模块解析.doc

    Python

Global site tag (gtag.js) - Google Analytics