urllib2自定义opener

urllib2.urlopen()函数不支持验证、cookie或者其它HTTP高级功能。要支持这些功能,必须使用build_opener()函数创建自定义Opener对象。

build_opener([handler1 [ handler2, … ]])

参数handler是Handler实例,常用的有HTTPBasicAuthHandler、HTTPCookieProcessor、ProxyHandler等。
build_opener ()返回的对象具有open()方法,与urlopen()函数的功能相同。
1.修改http报头

import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open('http://www.example.com/')

2.install_opener(opener)
安装不同的opener对象作为urlopen()使用的全局opener。

3.密码验证(HTTPBasicAuthHandler)
HTTPBasicAuthHandler()处理程序可用add_password()来设置密码。

h.add_password(realm,uri,user,passwd)

realm是与验证相关联的名称或描述信息,取决于远程服务器。uri是基URL。user和passwd分别指定用户名和密码。

import urllib2
auth=urllib2.HTTPBasicAuthHandler()
auth.add_password('Administrator','http://www.example.com','Dave','123456')
opener=urllib2.build_opener(auth)
u=opener.open('http://www.example.com/evilplan.html')

4.Cookie处理(HTTPCookieProcessor)

import urllib2,cookielib
cookie=cookielib.CookieJar()
cookiehand=urllib2.HTTPCookieProcessor(cookie)
opener=urllib2.build_opener(cookiehand)

5.代理(ProxyHandler)
ProxyHandler(proxies)参数proxies是一个字典,将协议名称(http,ftp)等映射到相应代理服务器的URL。

proxy=ProxyHandler({'http':'http://someproxy.com:8080'})
auth=HTTPBasicAuthHandler()
auth.add_password()
opener=build_opener(auth,proxy)

也可以在urlopen中使用代理

import urllib2  
proxy = 'http://%s:%s@%s' % ('userName', 'password', 'proxy')  
inforMation = urllib2.urlopen("http://www.example.com", proxies={'http':proxy})  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: urllib.request.build_opener是Python中urllib库中的一个函数,用于创建一个自定义的URL打开器。这个函数可以用来添加HTTP头、代理、cookie等信息,以便更好地控制URL请求和响应。通过使用build_opener函数,我们可以创建一个自定义的URL打开器对象,然后使用这个对象来发送HTTP请求和获取响应。 ### 回答2: urllib是一个Python标准库,提供了一些用于从URL检索数据的模块。其中一个模块是urllib.request,它提供了URL请求、打开、读取和关闭等基本的网络访问方法。而在urllib.request中提供了一个非常有用的方法————build_opener。 build_opener是用于创建一个新的OpenerDirector对象的函数,这个对象是多个handler组成的链,支持HTTP、HTTPS、FTP等协议,使得打开和访问URL变得更加灵活和强大。通过build_opener,我们可以自定义和配置处理器,以支持一些高级功能,如返回一个指定的User-Agent、处理Cookie,代理验证等操作。 例如,我们可以自定义一个opener,给它添加一个身份验证的处理器和一个代理处理器,从而可以使用一个指定的代理服务器访问某个受保护的网站: ``` import urllib.request username = 'username' password = 'password' proxy_addr = 'http://proxy.example.com:80' # 1. 创建一个包含代理处理器和身份验证处理器的opener proxy_handler = urllib.request.ProxyHandler({'http': proxy_addr, 'https': proxy_addr}) auth_handler = urllib.request.HTTPBasicAuthHandler() auth_handler.add_password(realm='whatever', uri='http://example.com/', user=username, passwd=password) opener = urllib.request.build_opener(proxy_handler, auth_handler) # 2. 使用opener打开url url = 'http://example.com/' response = opener.open(url) print(response.read()) ``` 通过build_opener创建的opener对象,可以让我们在请求URL时更加自由和灵活,同时,它还可以节省许多代码,让我们的程序更加简洁和易于维护。 ### 回答3: urllib.request.build_opener是Python标准库中的模块,用于创建一个自定义的、适合特定需求的opener对象。在使用urllib库中的函数实现HTTP请求时,可以使用默认的全局opener,但是这种方式不够灵活,无法满足所有的需求。使用build_opener()函数可以创建一个全新的opener对象,该对象可以实现不同的功能,例如:HTTP认证、cookies管理、代理设置等。 build_opener()函数返回一个OpenerDirector对象,该对象包含了可以发送HTTP请求的所有功能,用于处理 URL 对象和request 请求,支持http、https、ftp、file等各种协议的处理。通过添加特定的handler(s)和opener(s),可以实现更加自定义化的HTTP请求。 通常情况下,我们可以使用方法urllib.request.OpenerDirector.open()来发送request请求,该方法可以根据URL对应的协议自动选择合适的handler来处理request请求,但是并不能满足对URL访问的所有应用场景。如果需要特定的handler处理URL访问,则需要使用build_opener()方法,该方法可以创建一个自定义opener用于处理特定的request请求。使用build_opener()方法可以为opener添加特定的Handler进行定制,例如HTTPCookieProcessor、ProxyHandler等。 以下是build_opener()函数的示例代码: import urllib.request import urllib.parse from urllib.error import URLError, HTTPError # 创建一个自定义opener对象 opener = urllib.request.build_opener() # 创建一个HTTPCookieProcessor对象 cookie_handler = urllib.request.HTTPCookieProcessor() # 将HTTPCookieProcessor加入到自定义opener之中 opener.add_handler(cookie_handler) # 使用自定义opener发送request请求 url = "http://www.example.com/" request = urllib.request.Request(url) response = opener.open(request) 在该示例代码中,我们首先创建了一个自定义opener对象,然后创建了一个HTTPCookieProcessor对象,最后通过add_handler()方法将这个处理器添加到自定义opener之中,最后使用opener发送request请求。 使用build_opener()函数创建自定义opener对象,可以有效地实现HTTP请求的定制化处理,提高代码对URL请求的处理能力和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值