python之http.client模块介绍

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服务器发送请求

  2. HTTPSConnection 是 HTTPConnection 的子类,使用 SSL 与安全服务器进行通信

    baidu现在只能通过https进行访问,所以必须通过该类向baidu服务器发请求

  3. HTTPResponse 将web服务器返回的响应数据,封装成该对象,是iterable对象,可在with语句中使用

  4. 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


原文出处:/show_1EF2a2QHb72Q.html