HTTPPasswordMgrWithDefaultRealm()

HTTPPasswordMgrWithDefaultRealm()类将创建一个密码管理对象,用来保存 HTTP 请求相关的用户名和密码,主要应用两个场景:

  1. 验证代理授权的用户名和密码 (ProxyBasicAuthHandler())
  2. 验证Web客户端的的用户名和密码 (HTTPBasicAuthHandler())

ProxyBasicAuthHandler(代理授权验证)

如果我们使用之前的代码来使用私密代理,会报 HTTP 407 错误,表示代理没有通过身份验证:

urllib2.HTTPError: HTTP Error 407: Proxy Authentication Required

所以我们需要改写代码,通过:

  • HTTPPasswordMgrWithDefaultRealm():来保存私密代理的用户密码
  • ProxyBasicAuthHandler():来处理代理的身份验证。
#urllib2_proxy2.py

import urllib2
import urllib # 私密代理授权的账户
user = "mr_mao_hacker"
# 私密代理授权的密码
passwd = "sffqry9r"
# 私密代理 IP
proxyserver = "61.158.163.130:16816" # 1. 构建一个密码管理对象,用来保存需要处理的用户名和密码
passwdmgr = urllib2.HTTPPasswordMgrWithDefaultRealm() # 2. 添加账户信息,第一个参数realm是与远程服务器相关的域信息,一般没人管它都是写None,后面三个参数分别是 代理服务器、用户名、密码
passwdmgr.add_password(None, proxyserver, user, passwd) # 3. 构建一个代理基础用户名/密码验证的ProxyBasicAuthHandler处理器对象,参数是创建的密码管理对象
# 注意,这里不再使用普通ProxyHandler类了
proxyauth_handler = urllib2.ProxyBasicAuthHandler(passwdmgr) # 4. 通过 build_opener()方法使用这些代理Handler对象,创建自定义opener对象,参数包括构建的 proxy_handler 和 proxyauth_handler
opener = urllib2.build_opener(proxyauth_handler) # 5. 构造Request 请求
request = urllib2.Request("http://www.baidu.com/") # 6. 使用自定义opener发送请求
response = opener.open(request) # 7. 打印响应内容
print response.read()

HTTPBasicAuthHandler处理器(Web客户端授权验证)

有些Web服务器(包括HTTP/FTP等)访问时,需要进行用户身份验证,爬虫直接访问会报HTTP 401 错误,表示访问身份未经授权:

urllib2.HTTPError: HTTP Error 401: Unauthorized

如果我们有客户端的用户名和密码,我们可以通过下面的方法去访问爬取:

import urllib
import urllib2 # 用户名
user = "test"
# 密码
passwd = "123456"
# Web服务器 IP
webserver = "http://192.168.199.107" # 1. 构建一个密码管理对象,用来保存需要处理的用户名和密码
passwdmgr = urllib2.HTTPPasswordMgrWithDefaultRealm() # 2. 添加账户信息,第一个参数realm是与远程服务器相关的域信息,一般没人管它都是写None,后面三个参数分别是 Web服务器、用户名、密码
passwdmgr.add_password(None, webserver, user, passwd) # 3. 构建一个HTTP基础用户名/密码验证的HTTPBasicAuthHandler处理器对象,参数是创建的密码管理对象
httpauth_handler = urllib2.HTTPBasicAuthHandler(passwdmgr) # 4. 通过 build_opener()方法使用这些代理Handler对象,创建自定义opener对象,参数包括构建的 proxy_handler
opener = urllib2.build_opener(httpauth_handler) # 5. 可以选择通过install_opener()方法定义opener为全局opener
urllib2.install_opener(opener) # 6. 构建 Request对象
request = urllib2.Request("http://192.168.199.107") # 7. 定义opener为全局opener后,可直接使用urlopen()发送请求
response = urllib2.urlopen(request) # 8. 打印响应内容
print response.read()

 
 
 
 

最新文章

  1. MySQL2:四种MySQL存储引擎
  2. 探求网页同步提交、ajax和comet不为人知的秘密(上篇)
  3. 演示一个OLS进行数据访问控制的示例
  4. SharpGL学习笔记(十六) 多重纹理映射
  5. 腾讯星座运势api
  6. 聊聊 Xcode 项目文件中的 project.pbxproj
  7. Hadoop概念学习系列之谈谈RPC(三十三)
  8. 3.bit-map
  9. 图的强连通&双连通
  10. iPhone 5,6,6 plus 尺寸
  11. C# ITextShap 生成PDF 下载
  12. eclipse编码设置
  13. Android大作业
  14. HashMap实现原理简析及实现的demo(一看就明白)
  15. Python编码和Unicode
  16. 大杂烩 -- equals、hashCode联系与区别
  17. Lex与Yacc学习
  18. java操作hbase1.3.1的增删改查
  19. [Django学习]视图
  20. solr-DIH:定时增量索引

热门文章

  1. DB2 错误 54001
  2. mysql(MySQL客户端连接工具)
  3. wireshark工具集
  4. csu 1551: Longest Increasing Subsequence Again BIT + 思维
  5. Problem D. What a Beautiful Lake dp
  6. shell与aw的简单交互示例
  7. VBA小记
  8. cp参数详解
  9. 学习用5W1H来管理自己的项目/工作
  10. FusionCharts 3.2.1 常用用法