• 创建Opener对象以实现Cookie与其它HTTP功能

    扩展urlopen()函数
    服务器君一共花费 10.142 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    基本的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处理。如下面代码:

    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)
    
更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [数据库技术] SQL基础语法 1 个条目
  2. [移动开发] Content Provider内容提供者 3 个条目
  3. [计算机算法] TAOCP与算法 12 个条目
  4. [JavaScript程序设计] jQuery与表单操作 2 个条目
  5. [移动开发] Android 网络通信框架Volley 1 个条目
  6. [Python程序设计] Tornado表单处理 3 个条目
  7. [C语言程序设计] 结构体基本知识 1 个条目
  8. [移动开发] Android与SQLite数据库 7 个条目
  9. [智力开发与知识管理] 超越整体性学习 5 个条目
  10. [软件工程与项目管理] 浏览器与CSS渲染技巧 2 个条目
  11. [智力开发与知识管理] 信息的类型与结构 9 个条目
  12. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
窗口 -- [八点]