http包介绍
http包位置:python安装目录\Lib\http
主要有以下几个模块:
client 是低层的http协议客户端,被高级的urllib.request模块使用
server 底层是基于socketserver实现的基本http服务器
cookies 实现 cookie 状态管理
cookiejar 与 cookie 相关
官方网址说明:
https://docs.python.org/3/library/http.html
client模块介绍
client模块实现 http 和 https 协议客户端,通常不会直接使用,而是被更高级的 urllib.request 模块来使用
官方说明网址:https://docs.python.org/3/library/http.client.html#module-http.client
主要有两个类:
HTTPConnection 表示与HTTP服务器的事务,处理请求头数据,向web服务器发送请求
HTTPSConnection 是 HTTPConnection 的子类,使用 SSL 与安全服务器进行通信
baidu现在只能通过https进行访问,所以必须通过该类向baidu服务器发请求
HTTPResponse 将web服务器返回的响应数据,封装成该对象,是iterable对象,可在with语句中使用
HTTPMessage 将HTTP响应头信息封装成该类对象中
感性认识
import http.client
try:
#创建对象,指定host、port
conn=http.client.HTTPConnection('www.sohu.com')
#指定请求方法、请求资源、请求头
conn.request("GET","/",None,{'User-Agent': 'Python-urllib/3.6'})
#获取响应对象
resp = conn.getresponse()
#打印状态码、对应英文、协议版本
print(resp.status, resp.reason,resp.version)
#打印响应头
print(resp.headers)
if resp.status==200:
#读取正文
data = resp.read()
#从响应头获取编码
contenttype=resp.getheader('Content-Type')
charset=contenttype.split('charset=')[1]
print(charset)
#将正文进行解码
print(data.decode(charset))
except :
conn.close()
raise
HTTPConnection类介绍
request方法
使用指定的 method 方法和 url 链接向服务器发送请求。
如果指定 了body 部分,那么 body 部分将在 header 部分发送完之后发送过去。
语法:
HTTPConnection.request(method, url, body=None, headers={})
参数说明:
- body 可以是一个字符串、字节对象、文件对象或者是字节对象的迭代器。不同的 body 类型对应不同的要求。
- header 是 HTTP 头部信息,是dict类型。
如果 header 中不包含 Content-Length 项,那么会根据 body 的不同来自动添加上去。
getresponse方法
必须在请求发送后才能调用得到服务器返回的内容
语法
HTTPConnection.getresponse()
返回:
HTTPResponse 实例。
注意:不能访问仅支持HTTPS的网站
百度官网仅支持https安全协议,即:https://www.baidu.com ,需要使用HTTPSConnection访问
HTTPResponse 类介绍
read方法
读取和返回 response 的 body 部分。
语法
HTTPResponse.read([amt])
参数:
amt:读取长度
getheader
返回指定名称 name 的 HTTP 头部值,如果没有相应匹配的 name 值,则返回默认的 None。如果有多个相匹配的,则返回所有的值,以逗号分隔。
语法
HTTPResponse.getheader(name,default=None)
getheaders
以元组的形式返回所有的头部信息 (header,value)
语法
HTTPResponse.getheaders()
headers
将响应头信息封装成HTTPMessage对象
msg
同headers
version
HTTP 协议版本
status
HTTP 状态码
reason
HTTP 状态码对应的英文
更详细的方法说明参见下面链接:
https://www.jb51.net/article/109852.htm
gzip感谢:
https://blog.csdn.net/airgreen/article/details/79658229