Python HTTP库网络编程详解_惠州Python培训
作者:黄君发布时间:2020-12-19分类:Python技术浏览:1085
HTTP(Hyper Text Transfer Protocol)是一个客户端和服务器端请求和应答的标准。客户端是终端用户,服务器端是网站。客户端发起一个到服务器上指定端口的 HTTP 请求,服务器向客户端发回一个状行和响应的消息。
可以使用下面的模块创建 Internet Server:
socketserver:以 socket 为基础,一般性的 IP Server。
http:通过 http 模块中的子模块 server 和 client 提供各种网络服务。
本节主要介绍 Python 的 socketserver 模块。
1. socketserver模块中的类
socketserver 模块提供了一个架构来简化网络包括服务器的编写工作,用户不需要使用低级的 socket 模块。socketserver 模块提供了基本的 server 类,即 TCPServer、UDPServer、StreamRequestHandler 及 DatagramRequestHandler,这些类处理同步的请求,每一个请求都必须在下一个请求开始前完成。但是如果客户端需要长时间的计算,这些类就不适合。
为了通过线程来处理请求,可以使用 ThreadingTCPServer 、ThreadingUDPServer 类、ForkingTCPServer 类及 ForkingUDPServer 类。
StreamRequestHandler 与 DatagramRequestHandler 类提供了两个属性,即 self.rfile 与 self.wfile,可以用来在客户端应用程序中读/写数据。
下面是 SocketServe 模块提供的类:
1) TCPServer((hostname, port), handler)
支持 TCP 协议的服务器。其中,hostname 是主机名称,通常是空白字符串;port 是通信端口号码;handler 是 BaseRequestHandler 类的实例变量。
2)UDPServer((hostname, port), handler)
支持 UDP 协议的服务器。其中,hostname 是主机名称,通常是空白字符串;port 是通信端口号码;handler 是 BaseRequestHandler 类的实例变量。
3) UNTXStreamServer((hostname, port), handler)
使用 UNTX 网域 socket 支持串流导向协议(stream-oriented protocol)的服务器。其中,hostname 是主机名称,通常是空白字符串;port 是通信端口号码;handler是 BaseRequestHandler 类的实例变量。
4) UNTXDatagramServer((hostname, port), handler)
使用 UNTX 网域 socket 支持数据通信协议(datagram-oriented protocol)的服务器其中,hostname 是主机名称,通常是空白字符串;port 是通信端口号码;handler 是 BaseRequestHandler 类的实例变量。
2. socketserver类变量与类属性
下面是上述类的类变量:
request_queue_size:存储要求队列的大小,该队列用于传给 socket 的 listen() 方法。
socket_type:返回服务器使用的socket类型,可以是 socket.SOCK_STREAM 或 socket.SOCK_DGRAM。
下面是上述类的属性与方法:
1) address_family
可以是 socket.AF_INET 或 socket.AF_UNTX。服务器的通信协议群组。
2) fileno()
返回服务器 socket 的整数文件描述元(integer file descriptor)。
3) handle_request()
创建一个处理函数类的实例变量,以及调用 handle() 方法处理单一请求。
4) RequestHandlerClass
存储用户提供的请求处理函数类。
5) server_address
返回服务器监听用的 IP 地址与通信端口号码。
6) serve_forever()
操作一个循环来处理无限的请求。
http 模块的子模块 server 提供了各种 HTTP 服务,主要包括 BaseHTTPServer类、CGIHTTPServer 类及 SimpleHTTPServer 类。
server 模块定义两个基类来操作基本的 HTTP 服务器(网站服务器)。此模块以 socketserver 模块为基础,并且很少直接使用。
3. HTTPServer类
server 模块的第一个基类是 HTTPServer 类,其语法如下:
class HTTPServer((hostname, port), RequestHandlerClass)
HTTPServer 类由 socketserver.TCPServer 类派生。此类先创建一个 HTTPServer 对象并监听(hostname, port),然后使用 RequestHandlerClass 来处理要求。
4. BaseHTTPRequestHandler类
server 模块的第二个基类是 BaseHTTPRequestHandler 类,其语法如下:
class BaseHTTPRequestHandler(request, client_address, server)
用户必须创建一个 BaseHTTPRequestHandler 类的子类来处理 HTTP 请求。如果要处理 GET 请求,就必须重新定义 do_GET() 方法;如果要处理 POST 请求,就必须重新定义 do_POST() 方法。
1) 类变量
下面是 BaseHTTPRequestHandler 类的类变量:
BaseHTTPRequestHandler.server_version
BaseHTTPRequestHandler.sys_version
BaseHTTPRequestHandler.protocol_version
BaseHTTPRequestHandler.error_message_format
2) 类属性
每一个 BaseHTTPRequestHandler 类的实例变量都有以下属性:
client_address:返回一个 2-tuple(hostname, port),为客户端的地址。
command:识别请求的种类,可以是 GET、POST 等。
headers:返回一个 HTTP 表头。
path:返回请求的路径。
request_version:返回请求的HTTP版本字符串。
rfile:包含输入流。
wfile:包含输出流。
3) 类方法
每一个 BaseHTTPRequestHandler 类的实例变量都有以下方法:
handle():请求分派器。此方法会调用以“do_”开头的方法,如do_GET()、do_POST()等。
send_error(error_code [, error_message]):将错误信号传输给客户端。
send_response(response_code [, response_message]):传输响应表头。
send_header(keyword, value):写入一个MIME表头到输出流,此表头包含表头的键值及其值。
end_header():用来识别MIME表头的结尾。
5. SimpleHTTPServer类
SimpleHTTPServer 类可以处理 HTTP server 的请求,也可以处理所在目录的文件,即 HTML 文件。SimpleHTTPRequestHeader 类的语法格式如下:
class SimpleHTTPRequestHandler(request, (hostname, port), server)
SimpleHTTPRequestHeader类有以下两个属性:
SimpleHTTPRequestHeader.server_version
SimpleHTTPRequestHeader.extensions_map:一个字典集,用于映像文件扩展名与MIME类型。
6. CGIHTTPRequestHeader类
CGIHTTPRequestHeader 类除了可以处理所在目录的 HTML 文件外,还可以运行客户端执行 CGI(Common Gateway Interface)脚本。
CGIHTTPRequestHeader 类的语法格式如下:
class CGIHTTPRequestHandler(request, (hostname, port), server)
CGIHTTPRequestHeader 类的属性 cgi_directories,包含一个可以存储 CGI 脚本的文件夹列表。
HTTPConnection 类的实例变量的方法如下:
endheaders():写入一行空白给服务器,表示这是客户端请求表头的结尾。
connect([hostname [, port]]):创建一个连接。
getresponse():返回服务器的状态。
request():向服务器发送请求。
putheader(header, argument1 [, ...]):写入客户端请求表头的表头行。每一行包括 header、一个冒号(:)、一个空白及 argument。
putrequest(request, selector):写入客户端请求表头的第一行。参数 request 可以是 GET、POST、PUT 或 HEAD。参数 selector 是要打开的文件名称。
send(data):调用 endheaders() 方法后,传输数据给服务器。
相关推荐
- 转职Web前端开发要具备哪些技术?_惠州前端培训学校
- 转行Web前端开发要掌握哪些技术?_惠州前端培训学校
- 如何学习Web前端知识转型?_惠州前端培训学校
- Web前端工程师必须具备哪些JS技巧?_惠州前端培训学校
- Web前端开发|怎么封装几个Vue3中很有用的组合式API?_惠州前端培训学校
- Web前端开发如何使用JS中的arguments?_惠州前端培训学校
- Web前端开发如何在TypeScript中使用基本类型?_惠州前端培训学校
- 优秀Web前端开发工程师必须具备哪些技能?_惠州前端培训学校
- Web前端开发|GraphQL是什么?_惠州前端培训学校
- Web前端工程师要学会哪些技能?_惠州前端培训学校
- Python技术排行
-
- 1Python3文件对象的方法之f.write()_惠州计算机Python软件开发
- 2Python对工作具体有什么帮助
- 3Python3 len()方法_惠州计算机Python培训学校
- 4Python3 tuple 函数_惠州计算机Python培训学校
- 5Python float() 函数_惠州计算机Python培训学校
- 6Python type() 函数_惠州计算机Python培训学校
- 7Python iter() 函数_惠州计算机Python培训学校
- 8Python3 bytes 函数_惠州计算机Python培训学校
- 9Python property() 函数_惠州计算机Python培训学校
- 标签列表
-
- Java (3694)
- 北大青鸟 (3713)
- 软件开发 (3613)
- JAVA (3413)
- UI设计入门 (2093)
- 惠州北大青鸟 (4375)
- 惠州IT培训 (2558)
- UI设计培训 (2090)
- 惠州UI设计培训 (2095)
- 惠州UI设计培训学校 (2090)
- 惠州计算机软件培训 (6260)
- 惠州计算件软件开发 (6260)
- 惠州计算机软件基础 (6261)
- 惠州计算机JAVA培训 (3574)
- 惠州计算机Java软件开发 (3620)
- 惠州计算机JAVA软件开发 (4645)
- 惠州计算机JAVA软件开发学校 (3338)
- 惠州计算机Java软件开发培训 (3338)
- 北大青鸟IT计算机学校 (5048)
- 北大青鸟IT软件学校 (5062)
- 北大青鸟IT学校 (5059)
- 惠州计算机UI设计软件开发 (2088)
- UI设计基础教程 (2088)
- UI设计是什么 (2088)
- UI设计教程 (2088)
- 网站分类
-
- 计算机教程
- 计算机入门
- 职业学校
- 新闻动态
- 专业课程
- 热门技术
- SEO
- 培训教程
- windows
- linux教程
- 系统集成
- 网站开发
- Html5
- 办公软件
- 师资力量
- 热点问答
- 联系我们
- 计算机学校
- 惠州计算机学校
- 河源计算机学校
- 广州计算机学校
- 深圳计算机学校
- 湛江计算机学校
- 佛山计算机学校
- IT计算机培训信息
- 设计专业
- UI
- 影视特效
- 游戏动漫设计
- Photoshop
- AI设计
- 软件教程
- Java技术
- C语言/C++语言培训
- C#
- Python技术
- PHP
- 数据库
- SQL Server
- 网络教程
- 网络安全
- 网络营销
- 软件专业
- 大数据专业
- 前端开发专业
- 软件测试专业
- Python专业
- 软件实施
- 珠海计算机学校
- 初中生学什么好
- 计算机认证
- 文章归档
-
- 2024年11月 (14)
- 2024年10月 (32)
- 2024年9月 (29)
- 2024年8月 (68)
- 2024年7月 (59)
- 2024年6月 (43)
- 2024年5月 (48)
- 2024年4月 (80)
- 2024年3月 (65)
- 2024年2月 (54)
- 2024年1月 (25)
- 2023年12月 (12)
- 2023年11月 (73)
- 2023年10月 (134)
- 2023年9月 (34)
- 2023年8月 (3)
- 2023年7月 (3)
- 2023年6月 (12)
- 2023年5月 (30)
- 2023年4月 (72)
- 2023年3月 (11)
- 2023年2月 (34)
- 2023年1月 (37)
- 2022年12月 (78)
- 2022年11月 (359)
- 2022年6月 (1193)
- 2022年5月 (570)
- 2022年4月 (1567)
- 2022年3月 (982)
- 2022年2月 (54)
- 2022年1月 (182)
- 2021年9月 (308)
- 2021年8月 (1704)
- 2021年7月 (2423)
- 2021年6月 (1806)
- 2021年5月 (1569)
- 2021年4月 (1380)
- 2021年3月 (1255)
- 2021年2月 (709)
- 2021年1月 (1521)
- 2020年12月 (3626)
- 2020年11月 (1646)
- 2020年10月 (1046)
- 2020年9月 (592)
- 最近发表
-
- 清远信息:2024年广清杯清远南粤家政技能大赛举行决赛|||计算机培训机构
- 汕尾信息:陈良川带队到汕尾技师学院调研|||计算机职业技能培训班
- 东莞信息:凤岗凤岗镇组织召开社保参保缴费及劳动用工政策宣讲会|||计算机软件培训学校
- 阳江信息:2024年度注册城乡规划师职业资格考试的合格标准是怎样的?|||计算机软件培训学校
- 阳江信息:职业技能提升补贴对象有哪些?|||大学生计算机培训学校
- 清远信息:清远市首家社保服务合作网点在清城区举办启动仪式|||计算机职业技能培训班
- 汕头信息:招聘658名中高端人才!2024年汕头市引进中高端人才专场招聘会举行|||北大青鸟计算机培训中心
- 东莞信息:广东省社保智能经办现场会在东莞召开|||大学生计算机培训学校
- 东莞信息:东坑镇举办2024年重点群体系列招聘活动|||计算机职业技能培训班
- 东莞信息:万江万江街道成功举办第四届粤菜师傅烹饪技能竞赛|||广州计算机编程培训