Rumah pembangunan bahagian belakang Tutorial Python 深入理解Python3中的http.client模块

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

Mar 31, 2017 am 09:42 AM

这篇文章主要介绍了关于Python3中http.client模块的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

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>, ...]
Salin selepas log masuk

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'
Salin selepas log masuk

基本类

HTTPConnection 类

http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None)
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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

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, 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()
Salin selepas log masuk

Atas ialah kandungan terperinci 深入理解Python3中的http.client模块. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Apr 01, 2025 pm 05:09 PM

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam? Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam? Apr 02, 2025 am 07:18 AM

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam masa 10 jam? Sekiranya anda hanya mempunyai 10 jam untuk mengajar pemula komputer beberapa pengetahuan pengaturcaraan, apa yang akan anda pilih untuk mengajar ...

Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah? Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah? Apr 02, 2025 am 07:15 AM

Cara mengelakkan dikesan semasa menggunakan fiddlerevery di mana untuk bacaan lelaki-dalam-pertengahan apabila anda menggunakan fiddlerevery di mana ...

Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Apr 01, 2025 pm 11:15 PM

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Bagaimanakah uvicorn terus mendengar permintaan http tanpa serving_forever ()? Bagaimanakah uvicorn terus mendengar permintaan http tanpa serving_forever ()? Apr 01, 2025 pm 10:51 PM

Bagaimanakah Uvicorn terus mendengar permintaan HTTP? Uvicorn adalah pelayan web ringan berdasarkan ASGI. Salah satu fungsi terasnya ialah mendengar permintaan HTTP dan teruskan ...

Bagaimana secara dinamik membuat objek melalui rentetan dan panggil kaedahnya dalam Python? Bagaimana secara dinamik membuat objek melalui rentetan dan panggil kaedahnya dalam Python? Apr 01, 2025 pm 11:18 PM

Di Python, bagaimana untuk membuat objek secara dinamik melalui rentetan dan panggil kaedahnya? Ini adalah keperluan pengaturcaraan yang biasa, terutamanya jika perlu dikonfigurasikan atau dijalankan ...

See all articles