python之http.client模块介绍 作者:马育民 • 2019-01-09 15:19 • 阅读:10967 # http包介绍 http包位置:```python安装目录\Lib\http``` 主要有以下几个模块: 1. client 是低层的http协议客户端,被高级的urllib.request模块使用 2. server 底层是基于socketserver实现的基本http服务器 3. cookies 实现 cookie 状态管理 4. 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 主要有两个类: 1. HTTPConnection 表示与HTTP服务器的事务,处理请求头数据,向web服务器发送请求 3. HTTPSConnection 是 HTTPConnection 的子类,使用 SSL 与安全服务器进行通信 >baidu现在只能通过https进行访问,所以必须通过该类向baidu服务器发请求 2. HTTPResponse 将web服务器返回的响应数据,封装成该对象,是iterable对象,可在with语句中使用 3. 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 原文出处:http://www.malaoshi.top/show_1EF2a2QHb72Q.html