深入理解Python3中的http.client模块

深入理解Python3中的http.client模块,第1张

概述http模块简介Python3中的http包中含有几个用来开发HTTP协议的模块。http.client是一个底层的HTTP协议客户端,被更高层的urllib.request模块所使用。

http 模块简介

python3 中的 http 包中含有几个用来开发 http 协议的模块。

http.clIEnt 是一个底层的 http 协议客户端,被更高层的 urllib.request 模块所使用。 http.server 包含基于 socketserver 的基本 http 服务器的类。 http.cookies 实现 cookie 状态管理 http.cookiejar 与 cookie 相关

http 模块还定义了一系列的 http 状态码。

httpStatus 类是在 Python 3.5 版本中新增的。

>>> from http import httpStatus>>> httpStatus.OK<httpStatus.OK: 200>>>> httpStatus.OK == 200True>>> http.httpStatus.OK.value200>>> httpStatus.OK.phrase'OK'>>> httpStatus.OK.description'Request fulfilled,document follows'>>> List(httpStatus)[<httpStatus.CONTINUE: 100>,<httpStatus.SWITCHING_PROTOColS: 101>,...]

具体的 http 状态码和相应的说明可以在 Python 的官方文档上找到: https://docs.python.org/3/library/http.html

http.clIEnt 模块

http.clIEnt 模块定义了实现 http 和 https 协议客户端的类。

该模块通常不会直接使用,而是用封装好的 urllib.request 模块来使用他们处理 URL 。

常量

http 模块中的常量:

1、http.clIEnt.http_PORT

http 协议默认的端口号,总是 80 端口

2、http.clIEnt.httpS_PORT

https 协议默认的端口号,总是 443 端口

3、http.clIEnt.responses

将 http 1.1 状态码映射到 W3C 名字的字典。

例如:

http.clIEnt.responses[http.clIEnt.NOT_FOUND] is 'Not Found'

基本类

httpconnection 类

http.clIEnt.httpconnection(host,port=None,[timeout,]source_address=None)

httpconnection 实例表示与 http 服务器的事务。

实例化 httpconnection 时应该传递一个主机和可选的端口号。如果没有传递端口,而主机字符串是以 host:port 的形式,则会提取出端口值,否则将使用默认的 8- 端口。

如果给定了可选参数 timeout ,阻塞 *** 作将会在给定的时间后超时,若未给定,则使用默认的全局 timeout 设置。

可选参数 source_address 应该以 host 和 port 的元组形式 (host,port),用来作为 http 连接的源地址。

示例代码如下:

>>> h1 = http.clIEnt.httpconnection('www.python.org')>>> h2 = http.clIEnt.httpconnection('www.python.org:80')>>> h3 = http.clIEnt.httpconnection('www.python.org',80)>>> h4 = http.clIEnt.httpconnection('www.python.org',80,timeout=10)

source_address 是在 3.2 版本中添加的。

strict 参数在 3.4 版本中移除了。

httpSConnection 类

httpSConnection(host,key_file=None,cert_file=None,]source_address=None,*,context=None,check_hostname=None)

httpSConnection 是 httpconnection 的子类,使用 SSL 与安全服务器联系。

默认的端口是 443 端口。如果指定了 context ,必须是 ssl.SSLContext 类的实例来描述不同的 SSL 选项。

key_file 和 cert_file 已经被弃用了,取而代之的是 ssl.SSLContext.load_cert_chain() 。或者使用 ssl.create_default_context() 选择系统信任的 CA 证书。

check_hostname 参数也被弃用了,使用 context 的 ssl.SSLContext.check_hostname 属性。

httpResponse 类

class http.clIEnt.httpResponse(sock,deBUGlevel=0,method=None,url=None)

一旦连接成功就会返回该实例,该类的对象不能由用户直接实例化。

httpMessage 类

httpMessage 实例持有从 http response 返回的头部。

异常类

httpException 类

Exception 类的子类,也是 http 模块中其他异常类的基类。
其他异常类:

NotConnected InvalIDURL UnkNownProtocol UnkNownTransferEnCoding UnimplementedfileMode IncompletedRead ImproperConnectionState BadStatusline linetoolong CannotSendRequest CannotSendheader ResponseNotReady Remotedisconnected

类方法

httpconnection 对象方法

httpconnection 实例有如下的方法 :

1、httpconnection.request(method,url,body=None,headers={})

使用指定的 method 方法和 url 链接向服务器发送请求。

如果指定 了body 部分,那么 body 部分将在 header 部分发送完之后发送过去。body 部分可以是一个字符串、字节对象、文件对象或者是字节对象的迭代器。不同的 body 类型对应不同的要求。

header 参数应该是 http 头部的映射,是一个字典类型。

如果 header 中不包含 Content-Length 项,那么会根据 body 的不同来自动添加上去。

2、httpconnection.getresponse()

必须在请求发送后才能调用得到服务器返回的内容,返回的是一个 httpResponse 实例。

3、httpconnection.set_deBUGlevel(level)

设置调试级别,默认调试级别是 0 ,意味着没有调试输出。

4、httpconnection.set_tunnel(host,headers=None)

设置 http 隧道链接的主机和端口,这允许连接使用代理服务器。

5、httpconnection.connect()

连接指定的服务器。默认情况下,如果客户端没有连接,则会在 request 请求时自动调用该方法。

6、httpconnection.close()

关闭链接。

7、httpconnection.putrequest(request,selector,skip_host=False,skip_accept_enCoding=False)

当和服务器的链接成功后,应当首先调用该方法。

发送到服务器的内容包括:request 字符串、selector 字符串和 http 协议版本。

8、httpconnection.putheader(header,argument[,…])

发送 http 头部到服务器。

发送到服务器的内容包括:header 头部、冒号、空格和参数列表里的第一个。

9、httpconnection.endheaders(message_body=None)

发送一个空白行到服务器,标识头部的结束。

10、httpconnection.send(data)

发送数据到服务器。

应该在 endheaders() 方法之后和在 getresponse() 方法之前调用。

httpResponse 对象方法

httpResponse 实例包含了从服务器返回的 http 回应。

它提供了访问请求头部和 body 部分的方法。

httpResponse 是一个可迭代的对象而且可以使用 with 语句来声明。

httpResponse 实例有如下的方法 :

1、httpResponse.read([amt])

读取和返回 response 的 body 部分。

2、httpResponse.readinto(b)

读取指定的字节长度 len(b),并返回到缓冲字节 b 。

函数返回读取的字节数

3、httpResponse.getheader(name,default=None)

返回指定名称 name 的 http 头部值,如果没有相应匹配的 name 值,则返回默认的 None。如果有多个相匹配的,则返回所有的值,以逗号分隔。

4、httpResponse.getheaders()

以元组的形式返回所有的头部信息 (header,value)。

5、httpResponse.fileno()

6、httpResponse.msg

7、httpResponse.version。

http 协议版本

8、httpResponse.status

http 状态码

9、httpResponse.reason

10、httpResponse.deBUGlevel

11、httpResponse.closed

如果为 True ,说明连接已关闭。

示例

import http.clIEntimport urllib,parser# # 初始化一个 https 链接conn = http.clIEnt.httpSConnection("www.python.org")# 指定 request 请求的方法和请求的链接地址conn.request("GET","/doc/")# 得到返回的 http responser1 = conn.getresponse()# http 状态码print(r1.status,r1.reason)# http 头部print(r1.getheaders())# body 部分print(r1.read())# 如果连接没有关闭,打印输出前 200 个字节if not r1.closed: print(r1.read(200))# 关闭连接后才能重新请求conn.close()# 请求一个不存在的文件或地址conn.request("GET","/parrot.spam")r2 = conn.getresponse()print(r2.status,r2.reason)conn.close()# 使用 head 请求,但是不会返回任何数据conn = http.clIEnt.httpSConnection("www.python.org")conn.request("head","/")res = conn.getresponse()print(res.status,res.reason)data = res.read()print(len(data))conn.close()# 使用 POST 请求,提交的数据放在 body 部分params = urllib.parse.urlencode({'@number':12524,'@type':'issue','@action':'show'})# post 请求数据,要带上 Content-type 字段,以告知消息主体以何种方式编码headers = {"Content-type":"application/x-www-form-urlencoded","Accept":"text/plain"}conn = http.clIEnt.httpconnection("BUGs.python.org")conn.request("POST","/",params,headers)response = conn.getresponse()# 访问被重定向print(response.status,response.reason)print(response.read().decode("utf-8"))conn.close()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。

总结

以上是内存溢出为你收集整理的深入理解Python3中的http.client模块全部内容,希望文章能够帮你解决深入理解Python3中的http.client模块所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1202362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存