urllib的实现---请求响应and请求头处理
在python3中 urllib库和urilib2库合并成了urllib库。。
其中urllib2.urlopen()变成了urllib.request.urlopen()
urllib2.Request()变成了urllib.request.Request()
1,实现一个完整的请求和响应模型
import urllib #请求 request = urllib.request.Request('https://www.baidu,com') #响应 response = urllib.request.urlopen(request) html = response.read() print(html)
post请求
import urllib from urllib import parse from urllib import request url = 'https://www.xxx.com/login' postdata = {'username': 'qwe', 'password': 'qwe123' } #info 需要被编码成urllib 能理解的格式 data = parse.urlencode(postdata) req = request.Request(url,data) response = request.urlopen(req) html = response.read()
2.请求头headers处理
将上面的代码修改,设置一下请求头中的User-Agent域和Referer域信息
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。
from urllib import parse from urllib import request url = 'https://www.xxx.com/login' url_agent = 'Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1' referer = 'http://www.xxxx.com/' postdata = {'username': 'qwe', 'password': 'qwe123' } header = {'User-Agent': url_agent,'Referer': referer} #info 需要被编码成urllib 能理解的格式 data = parse.urlencode(postdata) req = request.Request(url,data,header) response = request.urlopen(req) html = response.read()
也可以使用add_header来添加修改如下
from urllib import parse from urllib import request url = 'https://www.xxx.com/login' url_agent = 'Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1' referer = 'http://www.xxxx.com/' postdata = {'username': 'qwe', 'password': 'qwe123' } #header = {'User-Agent': url_agent,'Referer': referer} #info 需要被编码成urllib 能理解的格式 data = parse.urlencode(postdata) req = request.Request(url) req.add_header('User-Agent',url_agent) req.add_header('Referer',referer) req.data = data response = request.urlopen(req) html = response.read()