创建Opener对象以实现Cookie与其它HTTP功能
2013-11-04 00:00
645 查看
基本的urlopen()函数不支持验证、cookie或其他HTTP高级功能。要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象。
install_opener(opener) 安装opener作为urlopen()使用的全局URL opener,即意味着以后调用urlopen()时都会使用安装的opener对象。opener通常是build_opener()创建的opener对象。
一些复杂情况详细解决办法:
1. cookie处理
如果要管理HTTP cookie,需要创建添加了HTTPCookieProcessor处理程序的opener对象。默认情况下。HTTPCookieProcessor使用CookieJar对象,将不同类型的CookieJar对象作为HTTPCookieProcessor的参数提供,可支持不同的cookie处理。如下面代码:
2. 代理
urllib2会自动检测代理设置,默认使用环境变量http_proxy 来设置 HTTP Proxy通常情况下,这是很有帮助的,因为也可能造成麻烦(因为通过代理获取本地URL资源时会被阻止,因此如果你正在通过代理访问Internet,那么使用脚本测试本地服务器时必须阻止urllib2模块使用代理)。因此,如果想在程序中明确Proxy的使用而不受环境变量的影响,可以通过创建ProxyHandler实例,并将实例作为build_opener()的参数来实现。如下面代码:
3. 一个简单的模拟登录例子:
install_opener(opener) 安装opener作为urlopen()使用的全局URL opener,即意味着以后调用urlopen()时都会使用安装的opener对象。opener通常是build_opener()创建的opener对象。
一些复杂情况详细解决办法:
1. cookie处理
如果要管理HTTP cookie,需要创建添加了HTTPCookieProcessor处理程序的opener对象。默认情况下。HTTPCookieProcessor使用CookieJar对象,将不同类型的CookieJar对象作为HTTPCookieProcessor的参数提供,可支持不同的cookie处理。如下面代码:
mcj=cookielib.MozillaCookieJar("cookies.txt") cookiehand=HTTPCookieProcessor(mcj) opener=urllib2.build_opener(cookiehand) u=opener.open(http://www.baidu.com)
2. 代理
urllib2会自动检测代理设置,默认使用环境变量http_proxy 来设置 HTTP Proxy通常情况下,这是很有帮助的,因为也可能造成麻烦(因为通过代理获取本地URL资源时会被阻止,因此如果你正在通过代理访问Internet,那么使用脚本测试本地服务器时必须阻止urllib2模块使用代理)。因此,如果想在程序中明确Proxy的使用而不受环境变量的影响,可以通过创建ProxyHandler实例,并将实例作为build_opener()的参数来实现。如下面代码:
import urllib2 enable_proxy = True proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'}) null_proxy_handler = urllib2.ProxyHandler({}) if enable_proxy: opener = urllib2.build_opener(proxy_handler) else: opener = urllib2.build_opener(null_proxy_handler) urllib2.install_opener(opener)
3. 一个简单的模拟登录例子:
#模拟登录 cj = cookielib.CookieJar() #用户名和密码 post_data = urllib.urlencode({'username': '[nowamagic]', 'password': '[mypass]', 'pwd': '1'}) #登录路径 #path = 'http://www.xiaomi.com/pass/serviceLoginAuth2' path = 'http://www.nowamagic.net/' cookieHandle = urllib2.HTTPCookieProcessor(cj) opener = urllib2.build_opener(cookieHandle) #url = opener.open('http://www.baidu.com') #page = url.read() opener.addheaders = [('User-agent', 'Opera/9.23')] urllib2.install_opener(opener) req = urllib2.Request(path, post_data) conn = urllib2.urlopen(req) result = conn.geturl() #print path #message = { #"header": conn.info(), #"status": conn.getcode(), #"url": conn.geturl(), #} self.render("nowamagic.html",message=result)
相关文章推荐
- HttpApplication 对象的创建过程及HttpModule过滤器的内部实现过程
- Spring创建对象工厂功能的简单实现
- (ASP.NET)通过Cookie对象实现页面访问计数功能。
- main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能
- 通过创建 HttpCookie 对象的实例编写 Cookie
- 简单工厂(Factory)-提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。
- 20.购物车商品价格的总和(里面有一些功能没有实现,创建textview布局对象,然后for()遍历数据求和)
- 用创建XMLHttpRequest对象与jQuery框架对文本为HTTP、JSON、XML的ajax实现比较
- 仿MFC实现c++的按名动态创建对象功能
- 用jquery实现cookie的操作以及创建js数组和遍历js数组,js对象,jquery.json的使用
- XMLHttpRequest对象实现AJAX登录功能
- 实现继承和创建对象的方法
- 一个创建XMLHttpRequest对象的js文件(适用asp,php,jsp,asp.net等)
- 实现在一个SAP系统中调用其它SAP系统的功能
- WAS6创建集群时配置 HTTP会话内存到内存复制的勾选 与会话保存对象必须序列化
- 实现HTTP协议Get、Post和文件上传功能——设计和模块
- 利用LVS的Mark功能实现HTTP和HTTPS服务的持久连接
- 用单片机实现HTTP网页服务器功能(详细教程)
- JS 自定义对象实现Java中的Map对象功能