简单的自定义opener()
import urllib2
http_handler = urllib2.HTTPHandler(debuglevel=1)
#http_handler = urllib2.HTTPSHandler()
opener = urllib2.build_opener(http_handler)
request = urllib2.Request("http://www.baidu.com/")
response = opener.open(request)
print response.read()
ProxyHandler处理器(代理设置)
#coding:utf-8
import urllib2
import random
proxy_list = [
{"http" : "124.88.67.81:80"},
{"http" : "124.88.67.81:80"},
{"http" : "124.88.67.81:80"},
{"http" : "124.88.67.81:80"},
{"http" : "124.88.67.81:80"}
]
proxy = random.choice(proxy_list)
# httpproxy_handler = urllib2.ProxyHandler({"http": "61.135.217.7"})
httpproxy_handler = urllib2.ProxyHandler(proxy)
nullproxy_handler = urllib2.ProxyHandler({})
proxySwitch = True
if proxySwitch:
opener = urllib2.build_opener(httpproxy_handler)
else:
opener = urllib2.build_opener(nullproxy_handler)
request = urllib2.Request("http://www.baidu.com/")
response = opener.open(request
#将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。
# urllib2.install_opener(opener)
# response = urllib2.urlopen(request)
print response.read()
HTTPPasswordMgrWithDefaultRealm()
ProxyBasicAuthHandler(代理授权验证)
(urllib2.HTTPError: HTTP Error 407: Proxy Authentication Required)#coding:utf-8
import urllib2
import urllib
# 私密代理授权的账户
user = ""
# 私密代理授权的密码
passwd = ""
# 私密代理 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客户端授权验证)
(urllib2.HTTPError: HTTP Error 401: Unauthorized)
#coding:utf-8
import urllib
import urllib2
# 用户名
user = ""
# 密码
passwd = ""
# 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()