Python中自带了http模块,http包中含有几个用来开发HTTP协议的模块。
- http.client是一个底层的HTTP协议客户端,被更高层的urllib.request模块所使用。
- http.server是基于socket server的基本HTTP服务器。
- http.cookies是cookie相关的内容及相关策略。
- http.cookiejar是针对cookie模块的管理封装。
Python http.client模块
http.client模块主要是客户端的HTTP通信实现库,主要是发送和接收HTTP报文。
其中主要是以下类:
- HTTPConnection:基于HTTP协议的客户端,指定URL后,可以发送请求报文和接收响应报文。
- HTTPResponse:封装来自服务器的HTTP响应,它提供对请求头和实体主体等的访问。
http.client HTTPConnection类
构造函数:
def __init__(self, host, port=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, source_address=None):
参数:
- host:请求的服务器host,不能以http://等协议开头;
- port:请求服务器的端口,数字类型;
- timeout:单次请求的socket timeout,未设置时,默认使用模块内的全局超时时间,Python2.6版本新加的;
- source_address:可选参数,是一个(主机,端口)的元组作为HTTP连接的源地址,Python3.2版本新加的;
request方法:
使用HTTP请求方法和向服务器发送请求。
def request(self, method, url, body=None, headers={}, *, encode_chunked=False):
参数:
- method:HTTP请求的方式,如'GET'、'POST'等字符串形式,必须要大写形式;
- url:请求的url路径;
- body:请求的body数据;
- headers:请求追加的头信息,字典类型;
- encode_chunked:仅当在headers中指定传输编码时,encode_chunked参数才相关。如果encode_chunked是False,则HTTPConnection对象假定所有编码由调用代码处理。如果它是True,主体将被块编码;
getresponse方法:
在发送请求后,调用此方法从服务器获取相应响应信息。
def getresponse(self):
返回值:
返回HTTPResponse对象实例。
http.client HTTPResponse类
字段:
status:服务器返回的状态码;
reason:服务器返回的原因短语;
read方法:
读取并返回响应正文,或直到下一个amt字节。
def read(self, amt=None):
参数:
- amt:可选参数,表示读取指定长度的字符,默认为None,即读取所有内容;
示例
import http.client
http_conn = http.client.HTTPConnection('www.kfa.or.kr')
http_conn.set_debuglevel(1)
http_conn.request('GET', '/national/gamelist2.asp', headers={'User-Agent': 'python3.6/http'})
response = http_conn.getresponse()
print('\n')
print('-------------')
print(response.status)
print(response.read().decode('utf-8'))