Heim >Backend-Entwicklung >Python-Tutorial >Vertiefendes Verständnis des http.client-Moduls in Python3

Vertiefendes Verständnis des http.client-Moduls in Python3

高洛峰
高洛峰Original
2017-03-31 09:42:287306Durchsuche

In diesem Artikel geht es hauptsächlich um Python3 Die relevanten Informationen des http.client-Moduls wird ausführlich vorgestellt. Schauen wir uns das unten an

Das http-Paket in Python3 enthält mehrere Module zum Entwickeln des HTTP-Protokolls http.client ist ein Low-Level-HTTP-Protokoll-Client, der von höherrangigen Benutzern verwendet wird. Ebenen. Wird vom Modul urllib.request verwendet.

    http.server enthält Klassen für grundlegende HTTP-Server, die auf socketserver basieren. Cookies implementieren Cookies <.>Status
  • Verwaltung

  • http.cookiejar Bezogen auf Cookies

  • Das http-Modul definiert auch eine Reihe von HTTP-

    -Statuscode . Die HTTPStatus-Klasse wurde in der Python 3.5-Version

  • http.client-Modul definiert Klassen, die http- und https-Protokoll-Clients implementieren

    Dieses Modul wird normalerweise nicht direkt verwendet, sondern wird vom Modul urllib.request zur Verarbeitung von URLs verwendet 🎜>Konstanten:

1. http.client.HTTP_PORTDie Standardportnummer des HTTP-Protokolls, immer Port 80

2 Die Standard-Portnummer des https-Protokolls, immer Port 443 3. http.client.responses

>>> 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>, ...]
ordnet HTTP 1.1-Statuscodes dem Wörterbuch von

W3C zu Namen .Zum Beispiel:

Basisklasse

HTTPConnection-Klasse

Eine HTTPConnection-Instanz stellt eine Transaktion mit einem HTTP-Server dar.

Beim Instanziieren einer HTTPConnection sollten ein Host und eine optionale Portnummer übergeben werden. Wenn kein Port übergeben wird und der Hoststring

die Form host:port hat, wird der Portwert extrahiert, andernfalls wird der standardmäßige 8-Port verwendet.

Wenn der optionale Parameter Timeout angegeben ist, wird der Blockierungsvorgang nach der angegebenen Zeit abgebrochen. Wenn er nicht angegeben ist, wird die standardmäßige globale Timeout-Einstellung verwendet.

Der optionale Parameter source_address sollte in Form eines Tupels aus Host und Port (host,port) vorliegen und als Quelladresse der HTTP-Verbindung verwendet werden.

Der Beispielcode lautet wie folgt:

source_address wurde in Version 3.2 hinzugefügt.

strikter Parameter wurde in Version 3.4 entfernt.

HTTPSConnection-Klasse

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

HTTPSConnection ist eine Unterklasse von HTTPConnection, die SSL verwendet, um einen sicheren Server zu kontaktieren. Der Standardport ist Port 443. Wenn Kontext angegeben wird, muss es sich um eine Instanz der Klasse ssl.SSLContext handeln, um die verschiedenen SSL-Optionen zu beschreiben. key_file und cert_file wurden veraltet und durch ssl.SSLContext.load_cert_chain() ersetzt. Oder verwenden Sie ssl.create_default_context(), um ein CA-Zertifikat auszuwählen, dem das System vertraut. Der Parameter

check_hostname ist ebenfalls veraltet. Verwenden Sie das ssl.SSLContext.check_hostname Attribut des Kontexts.

http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None)

HTTPResponse-Klasse

Diese Instanz wird zurückgegeben, sobald die Verbindung erfolgreich ist. Objekte dieser Klasse können nicht direkt vom Benutzer instanziiert werden.

HTTPMessage-Klasse

HTTPMessage-Instanz enthält die von der HTTP-Antwort zurückgegebenen Header.

>>> 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)

Ausnahmeklasse

HTTP

AusnahmeKlasse

Eine Unterklasse der Exception-Klasse und die Basisklasse für andere Ausnahmeklassen im http-Modul.
Andere Ausnahmeklassen:

  • NotConnected

  • InvalidURL

  • UnknownProtocol

  • UnknownTransferEncoding

  • UnimplementedFileMode

  • IncompletedRead

  • UnproperConnectionState

  • BadStatusLine

  • LineTooLong

  • CannotSendRequest

  • CannotSendHeader

  • ResponseNotReady

  • RemoteDisconnected

Klassenmethode

HTTPConnection-Objektmethode

HTTPConnection-Instanz verfügt über die folgenden Methoden:

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

Senden Sie eine Anfrage mit der angegebenen Methode und dem angegebenen URL-Link an den Server.

Wenn der Körperteil angegeben ist, wird der Körperteil gesendet, nachdem der Header-Teil gesendet wurde. Der Körperteil kann eine Zeichenfolge, ein Byte-Objekt, ein Dateiobjekt oder ein Iterator von Byte-Objekten sein. Unterschiedliche Körpertypen entsprechen unterschiedlichen Anforderungen.

Der Header-Parameter sollte eine Zuordnung von HTTP-Headern sein, bei denen es sich um einen Wörterbuchtyp handelt.

Wenn der Header das Element „Content-Length“ nicht enthält, wird es automatisch basierend auf dem Text hinzugefügt.

2. HTTPConnection.getresponse()

muss aufgerufen werden, nachdem die Anfrage gesendet wurde, um den vom Server zurückgegebenen Inhalt zu erhalten.

3. HTTPConnection.set_debuglevel(level)

Legen Sie den Debug-Level fest, was bedeutet, dass keine Debug-Ausgabe erfolgt.

4. HTTPConnection.set_tunnel(host, port=None, headers=None)

Legen Sie den Host und den Port des HTTP-Tunnel-Links fest, der der Verbindung die Verwendung eines Proxyservers ermöglicht.

5. HTTPConnection.connect()

Mit dem angegebenen Server verbinden. Standardmäßig wird diese Methode automatisch auf Anfrage aufgerufen, wenn der Client nicht verbunden ist.

6. HTTPConnection.close()

Schließen Sie den Link.

7. HTTPConnection.putrequest(request, selector, Skip_host=False, Skip_accept_encoding=False)

Wenn die Verbindung mit dem Server erfolgreich ist, sollte diese Methode zuerst aufgerufen werden.

Der an den Server gesendete Inhalt umfasst: Anforderungszeichenfolge, Auswahlzeichenfolge und HTTP-Protokollversion.

8. HTTPConnection.putheader(header, argument[, …])

HTTP-Header an den Server senden.

Der an den Server gesendete Inhalt umfasst: Header, Doppelpunkt, Leerzeichen und den ersten in der Parameterliste.

9. HTTPConnection.endheaders(message_body=None)

Senden Sie eine Leerzeile an den Server, um das Ende des Headers zu identifizieren.

10. HTTPConnection.send(data)

Daten an den Server senden.

sollte nach der endheaders()-Methode und vor der getresponse()-Methode aufgerufen werden.

HTTPResponse-Objektmethoden

HTTPResponse-Instanzen enthalten die vom Server zurückgegebene HTTP-Antwort.

Es bietet Methoden für den Zugriff auf den Anforderungsheader und die Textteile.

HTTPResponse ist ein iterierbares Objekt und kann mit der with-Anweisung deklariert werden.

HTTPResponse-Instanzen verfügen über die folgenden Methoden:

1. HTTPResponse.read([amt])

Lesen Sie den Textteil der Antwort und geben Sie ihn zurück.

2. HTTPResponse.readinto(b)

Lesen Sie die angegebene Bytelänge len(b) und kehren Sie zum Pufferbyte b zurück.

Funktion gibt die Anzahl der gelesenen Bytes zurück

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()

Das obige ist der detaillierte Inhalt vonVertiefendes Verständnis des http.client-Moduls in Python3. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn