http 模块简介

Python3 中的 http 包中含有几个用来开发 HTTP 协议的模块。
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, port=None, key_file=None, cert_file=None, [timeout, ]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 模块中其他异常类的基类。
其他异常类:
类方法
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, port=None, 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.client
import urllib,parser
# # 初始化一个 https 链接
conn = http.client.HTTPSConnection("www.python.org")
# 指定 request 请求的方法和请求的链接地址
conn.request("GET","/doc/")
# 得到返回的 http response
r1 = 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
# python
# httpclient
# client模块
# 基于Python的ModbusTCP客户端实现详解
# 解决python中导入win32com.client出错的问题
# Python Socket实现简单TCP Server/client功能示例
# python实现ModBusTCP协议的client功能
# 是一个
# 的是
# 可选
# 是在
# 子类
# 客户端
# 端口号
# 用了
# 如果没有
# 发送到
# 内容包括
# 则会
# 迭代
# 几个
# 就会
# 放在
# 第一个
# 多个
# 将在
# 会在
相关文章:
如何在局域网内绑定自建网站域名?
c# await 一个已经完成的Task会发生什么
广东企业建站网站优化与SEO营销核心策略指南
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
如何快速生成高效建站系统源代码?
建站主机服务器选购指南:轻量应用与VPS配置解析
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何配置WinSCP新建站点的密钥验证步骤?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
如何在IIS服务器上快速部署高效网站?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
建站VPS能否同时实现高效与安全翻墙?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
内部网站制作流程,如何建立公司内部网站?
制作网站怎么制作,*游戏网站怎么搭建?
如何在阿里云通过域名搭建网站?
建站之星上传入口如何快速找到?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
焦点电影公司作品,电影焦点结局是什么?
如何通过VPS搭建网站快速盈利?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
如何解决ASP生成WAP建站中文乱码问题?
如何在腾讯云服务器上快速搭建个人网站?
如何在建站之星绑定自定义域名?
建站之星安装路径如何正确选择及配置?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
家具网站制作软件,家具厂怎么跑业务?
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何配置FTP站点权限与安全设置?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
广州商城建站系统开发成本与周期如何控制?
如何在云服务器上快速搭建个人网站?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
建站之星微信建站一键生成小程序+多端营销系统
北京建设网站制作公司,北京古代建筑博物馆预约官网?
如何构建满足综合性能需求的优质建站方案?
深入理解Android中的xmlns:tools属性
如何选择适合PHP云建站的开源框架?
潮流网站制作头像软件下载,适合母子的网名有哪些?
,网站推广常用方法?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何快速搭建二级域名独立网站?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何通过VPS建站实现广告与增值服务盈利?
简历在线制作网站免费版,如何创建个人简历?
*请认真填写需求信息,我们会在24小时内与您取得联系。