**

昨夜西风凋敝树,独上高楼,望尽天涯路

衣带渐宽终不悔,为伊消得人憔悴。

**
urllib.request模块:
该模块是urllib的核心模块用于发送请求,获取请求返回结果。

urlopen()发起请求:
response  =urllib.request.urlopen(url,data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
参数解析:
	url:请求地址。
	data:bytes 类型的内容,可通过 bytes()函数转为化字节流。它也是可选参数。使用 data 参数,请求方式变成以 POST 方式提交表单。使用标准格式是application/x-www-form-urlencoded
	timeout 参数是用于设置请求超时时间。单位是秒。
	cafile和capath代表 CA 证书和 CA 证书的路径。如果使用HTTPS则需要用到
	context参数必须是ssl.SSLContext类型,用来指定SSL设置
	cadefault参数已弃用。
	
	urlopen()只能发起的简单的请求,实际使用的价值低,了解即可。为了能发起相对较复杂的请求,需要用到

Request()方法,用于构建Request实例,然后给openurl传参,访问目标地址。

.Request()发起请求:
request= urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

参数解析:
url:请求地址
data:同urlopen()方法一致。
headers:用户设置http请求头。是一个字典。添加方法除了在Request()中间添加,可以在Request实例的 add_header() 方法来添加请求头。
origin_req_host 参数指的是请求方的 host 名称或者 IP 地址
unverifiable 参数表示这个请求是否是无法验证的,默认值是False。意思就是说用户没有足够权限来选择接收这个请求的结果。例如我们请求一个HTML文档中的图片,但是我们没有自动抓取图像的权限,我们就要将 unverifiable 的值设置成 True。
method 参数指的是发起的 HTTP 请求的方式,有 GET、POST、DELETE、PUT等

Request与urlopen的简单运用实例:
import urllib.request
url = "http://tieba.baidu.com"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36"}
#构建request实例,
request = urllib.request.Request(url,headers=headers)
#也可以通过下面这种方式进行设置header
#request = urllib.request.Request(url)
#request.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36")
response = urllib.request.urlopen(request,timeout=2.0)
print(response)
print(response.read().decode('utf-8'))

**

request的代理设置

**

request代理设置
#使用ProxyHandler 进行代理配置。
proxy_handle = urllib.request.ProxyHandler({
    'http': '1.202.193.26:59212'
})
#使用build_opener创创建一个OpenerDirector 对象
opener = urllib.request.build_opener(proxy_handle)

#创建一个自定义的OpenerDirector 对象,此时的OpenerDirector为全局变量
urllib.request.install_opener(opener)
#使用自定义出来的OpenerDirector 对象访问地址(此时使用的代理地址。)
response = urllib.request.urlopen(request)

HTTPResponse

使用 urllib.request.urlopen() 或者 opener.open(url) 返回结果是一个 http.client.HTTPResponse 对象。
它具有 msg、version、status、reason、debuglevel、closed等属性
read()、readinto()、getheader(name)、getheaders()、fileno()等函数。

request常用handler类

• ProxyHandler:为请求设置代理
• HTTPCookieProcessor:处理 HTTP 请求中的 Cookies
• HTTPDefaultErrorHandler:处理 HTTP 响应错误。
• HTTPRedirectHandler:处理 HTTP 重定向。
• HTTPPasswordMgr:用于管理密码,它维护了用户名密码的表。
• HTTPBasicAuthHandler:用于登录认证,一般和 HTTPPasswordMgr 结合使用。

#后期完善