对python3 urllib包与http包的使用详解
urllib包和http包都是面向HTTP协议的。其中urllib主要用于处理URL,使用urllib操作URL可以像使用和打开本地文件一样地操作。而http包则实现了对HTTP协议的封装,是urllib.request模块的底层。
1.urllib包简介
2.http包简介
1.urllib包简介
urllib包主要模块有:
1.urllib.request-----用于打开URL网址;
2.urllib.error---------定义了常见的urllib.request会引发的异常;
3.urllib.parse---------用于解析URL;
具体方法:
urllib.request.urlopen(url,data,proxies):用于打开url
参数如下:
url:要进行操作的URL地址
data:可选项。向URL传递的数据。
proxies:可选项。使用的代理地址
importurllib.request url='http://www.baidu.com'#网页为百度首页 respone=urllib.request.urlopen(url)#打开url地址,并返回一个HTTPRespone实例 html=respone.read().decode('utf-8')#调用实例的read()方法,并用utf-8进行解码处理。就得出完整的百度的HTML文件 print(html)
部分打印结果:
urllib.request.urlretrieve(url,filename,reporthook,data):用于将URL的HTML文件下载并保存为本地文件
参数如下:
url:要下载的网页
filename:保存在主机的路径,可选项。
reporthook:一个回调函数,可选项。
data:发送的数据,一般用于post,可选项。
特别:关于urlretrieve()的回调函数reporthook:可以用来显示下载的进度,几乎已经封装好
importurllib.request defcallbackfunc(blocknum,blocksize,totalsize):#这三个参数是由urlretrieve自动赋值的 '''回调函数 @blocknum:已经下载的数据块 @blocksize:数据块的大小 @totalsize:远程文件的大小 ''' percent=100.0*blocknum*blocksize/totalsize ifpercent>100: percent=100 print("%.2f%%"%percent)#保留两位小数 url='http://www.sina.com' local='d:\\sina.html'#下载的html文件保存在d盘的sina.html里 urllib.request.urlretrieve(url,local,callbackfunc)#没下载完一个数据块,就会执行回调函数一次
执行结果:
//只显示局部 0.00% 1.38% 2.76% 4.13% 5.51% 6.89%
2.http包简介
http包提供了HTTP协议的一些功能,主要模块有:
http.client---底层的HTTP协议的一些功能,可以为urllib.request模块所用
http.server---提供了基于socketserver模块的基本HTTP服务器类
http.cookies---cookies的管理工具
http.client:
HttpClient不是一个浏览器。它是一个客户端的HTTP通信实现库。HttpClient的目标是发送和接收HTTP报文。
两个主要类(用于客户端):
HTTPConnection:基于HTTP协议的客户端,指定URL(网址)后,可以发送请求报文和接收响应报文
HTTPRespone:基于HTTP协议的服务端回应。一旦用HTTPConnection成功连接,可以调用相关方法返回该实例(HTTPRequest实例)。
(1)HTTPConnection的方法:
构造方法:HTTPConnection(host,port,[timeout])返回一个HTTPConnection实例
host:表示主机域名或ip地址
port:表示端口
timeout:阻塞操作将会在给定时间后超时。可选项
发送请求报文方法:HTTPConnection.request(method,url,body=None,headers={})
method:发送的操作,一般为GET或者POST
url:进行操作的url
body:所发送的数据
headers:发送的HTTP头部,是一个字典类型
获取响应报文方法:HTTPConnection.getrespone()
关闭与服务器的连接:HTTPConne.close()
发送一个头部:HTTPConnection.putheader(header,args[])#头部以一个字典方式发送
发送一个空白行到服务器,标志头部Header的结束:HTTPConnection.endheaders()
发送数据到服务器:HTTPConnection.send(data),应该在endheaders()之后和getrespone()之前调用。
(2)HTTPRespone:
HTTPRespone对象:一旦用HTTPConnection成功连接,可以调用HTTPConnection.getrespone()返回该实例(HTTPRequest实例)。
HTTPRespone.getheader(name):返回头部中的name字段对应的值
HTTPRespone.getheaders():以元组的方式返回整个头部的信息
HTTPRespone.read():返回响应报文中的body部分,也即正文部分
HTTPRespone.status#返回状态码
HTTPRespone.version#返回HTTP协议版本
http包应用实例。
fromhttp.clientimportHTTPConnection con=HTTPConnection('www.baidu.com',80) con.request('GET','/')#发送请求报文 res=con.getresponse()#获取响应报文对象 print(res.status)#200(表示状态码) print(res.reason)#OK (表示状态码对应的意义) print(res.read().decode('utf-8'))#打印www.baidu.com的html
以上这篇对python3urllib包与http包的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。