python学习笔记 --- 关于openers和handlers
2016-08-22 18:16
381 查看
我们使用一个opener去返回一个URL。通常我们默认的opener是通过urlopen。但是也可以创建一个惯用的(custom)openers。openers使用handlers,每一个handler知道怎么为一个特定的URL模式(http,ftp,etc.)打开URLs。
创建一个opener,就要实例化一个OpenerDirector,然后不停地调用.add_handler(some_handler_instance)。
或者,可以使用build_opener,这个单一的函数默认增加了各种handlers,但提供提供了一种快速的方式去增加或重写默认的handlers。
install_opener可以用来创建一个opener对象(全局的默认opener)。这意味着调用urlopen时会使用你已经安装的opener。
opener对象有一个open的方法,它能够直接调用来返回URL,就像urlopen函数一样。所以说没有必要去调用install_opener,除非它更方便。
创建和安装一个handler需要使用HTTPBasicAuthHandler。
当需要验证请求时,服务器发送一个header(以及401错误代码)请求验证身份。
这指定了一个authentication schema 和一个‘realm’。这个header模式就是:Www-authenticate: SCHEMA realm = ‘REALM’。
当发生401,用户应该重试请求,给header一个合适的姓名和密码。这就是基本的验证。为了简化这一过程,我们可以创建HTTPBasicAuthHandler的实例和一个opener去使用handler。
HTTPBasicAuthHandler会使用一个对象去调用一个密码管理者来处理URLs和realms到密码和用户名的映射。
如果你知道realm是什么(从服务器发送的authentica header),就可以使用HTTPPasswordMgr。
但是一般人并不知道realm是什么,在这种情况下,我们可以方便地使用HTTPPasswordMgrWithDefaultRealm,它允许你为URL去定义一个默认的username和password。
而它的add_password方法提供None作为realm的参数。
proxies
urllib2自动检测代理服务器设置和使用,它通过使用ProxyHandler。
创建一个opener,就要实例化一个OpenerDirector,然后不停地调用.add_handler(some_handler_instance)。
或者,可以使用build_opener,这个单一的函数默认增加了各种handlers,但提供提供了一种快速的方式去增加或重写默认的handlers。
install_opener可以用来创建一个opener对象(全局的默认opener)。这意味着调用urlopen时会使用你已经安装的opener。
opener对象有一个open的方法,它能够直接调用来返回URL,就像urlopen函数一样。所以说没有必要去调用install_opener,除非它更方便。
创建和安装一个handler需要使用HTTPBasicAuthHandler。
当需要验证请求时,服务器发送一个header(以及401错误代码)请求验证身份。
这指定了一个authentication schema 和一个‘realm’。这个header模式就是:Www-authenticate: SCHEMA realm = ‘REALM’。
当发生401,用户应该重试请求,给header一个合适的姓名和密码。这就是基本的验证。为了简化这一过程,我们可以创建HTTPBasicAuthHandler的实例和一个opener去使用handler。
HTTPBasicAuthHandler会使用一个对象去调用一个密码管理者来处理URLs和realms到密码和用户名的映射。
如果你知道realm是什么(从服务器发送的authentica header),就可以使用HTTPPasswordMgr。
但是一般人并不知道realm是什么,在这种情况下,我们可以方便地使用HTTPPasswordMgrWithDefaultRealm,它允许你为URL去定义一个默认的username和password。
而它的add_password方法提供None作为realm的参数。
<span style="font-size:14px;"># create a password manager password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() # Add the username and password. # If we knew the realm, we could use it instead of ``None``. top_level_url = "http://example.com/foo/" password_mgr.add_password(None, top_level_url, username, password) handler = urllib2.HTTPBasicAuthHandler(password_mgr) # create "opener" (OpenerDirector instance) opener = urllib2.build_opener(handler) # use the opener to fetch a URL opener.open(a_url) # Install the opener. # Now all calls to urllib2.urlopen use our opener. urllib2.install_opener(opener)</span>
proxies
urllib2自动检测代理服务器设置和使用,它通过使用ProxyHandler。
<span style="font-size:14px;">>>> proxy_support = urllib2.ProxyHandler({}) >>> opener = urllib2.build_opener(proxy_support) >>> urllib2.install_opener(opener)</span>
相关文章推荐
- python笔记(1) 关于我们应不应该继续学习python
- Python学习笔记(六)关于日期的一些操作
- [python]学习笔记4-关于列表去重练习
- Python的学习笔记DAY10---关于正则表达式
- Python学习笔记 1 关于字符串
- Python学习笔记(四) 关于dictionary遍历
- python学习笔记 --- 关于cookielib
- 一些关于Python的基础知识 - 千月的python linux 系统管理指南学习笔记(3)
- Python的学习笔记DAY7---关于爬虫(2)之Scrapy初探
- Python学习笔记(二)关于Python的IDE选择
- python笔记(1)-关于我们应不应该继续学习
- Python学习笔记--关于split的分割问题
- python学习笔记 --- 关于urllib2
- Python笔记1--关于序列的学习
- python学习笔记(一)——关于正则表达式的学习小结
- 【python学习笔记】关于sys.path与pythonpath
- Python面向对象编程中关于类和方法的学习笔记
- python学习笔记 --- 关于python的闭包
- 30. Python脚本学习笔记三十 更多关于SWIG
- python学习笔记--关于编码