Модуль http.client
определяет классы, реализующие клиентскую сторону протоколов HTTP и HTTPS.
Обычно этот модуль не используется напрямую - его использует модуль urllib.request
для обработки URL-адресов, использующих HTTP и HTTPS.
http.client
;http.client
;http.client
;http.client
;http.client
;http.client
.>>> import http.client >>> conn = http.client.HTTPSConnection("www.python.org") >>> conn.request("GET", "/") >>> r1 = conn.getresponse() >>> print(r1.status, r1.reason) # 200 OK # Прочитаем страницу целиком >>> data1 = r1.read() # чтение данных по частям >>> conn.request("GET", "/") >>> r1 = conn.getresponse() >>> while chunk := r1.read(200): ... print(repr(chunk)) # b'<!doctype html>\n<!--[if"... # ...
Пример недопустимого GET-запроса:
>>> conn = http.client.HTTPSConnection("docs.python.org") >>> conn.request("GET", "/parrot.spam") >>> r2 = conn.getresponse() >>> print(r2.status, r2.reason) # 404 Not Found >>> data2 = r2.read() >>> conn.close()
http.client
.>>> import http.client >>> conn = http.client.HTTPSConnection("www.python.org") >>> conn.request("HEAD", "/") >>> res = conn.getresponse() >>> print(res.status, res.reason) # 200 OK >>> data = res.read() >>> print(len(data)) # 0 >>> data == b'' # True
http.client
.>>> import http.client, urllib.parse >>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'}) >>> 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) # 302 Found >>> data = response.read() >>> data # b'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>' >>> conn.close()
http.client
.HTTP-запросы PUT на стороне клиента очень похожи на запросы POST. Разница заключается только на стороне сервера, где HTTP-сервер позволяет создавать ресурсы с помощью запроса PUT. Следует отметить, что пользовательские методы HTTP также обрабатываются в urllib.request.Request
путем установки соответствующего атрибута метода. Вот пример сеанса, который показывает, как отправить запрос PUT с помощью http.client
:
# Этот код создает HTTP-сообщение с содержимым # BODY в качестве закрытого представления # для ресурса http://localhost:8080/file. >>> import http.client >>> BODY = "***filecontents***" >>> conn = http.client.HTTPConnection("localhost", 8080) >>> conn.request("PUT", "/file.txt", BODY) >>> response = conn.getresponse() >>> print(response.status, response.reason) # 200, OK
http.client
.from http.client import HTTPSConnection from base64 import b64encode # Установим соединение https con = HTTPSConnection("www.google.com") # Необходимо закодировать `username:password` в base64, а затем # декодировать в acsii, т.к. python3 сохраняет их как байтовую строку user_pass = b64encode(b"username:password").decode("ascii") headers = {'Authorization': f'Basic {user_pass}'} # подключаемся con.request('GET', '/', headers=headers) # Получаем ответ res = con.getresponse() # на этом этапе можно проверить статус и т. д. # и получить текст страницы data = res.read()
http.client
.import http.client, json # Установим соединение https connection = http.client.HTTPSConnection('api.github.com') # необходимо сообщить серверу, в каком виде поступит запрос # для этого установим заголовки headers = {'Content-type': 'application/json'} # сам JSON запрос foo = {'text': 'Hello world github/linguist#1 **cool**, and #1!'} json_foo = json.dumps(foo) # отправляем запрос на сервер connection.request('POST', '/markdown', json_foo, headers) # читаем ответ сервера response = connection.getresponse() print(response.read().decode())