все Python 3urllib.requestпонятие
urllib.request.HTTPHandler
обработчики протоколов
Обработчик http:// URL: перед отправкой дописывает служебные заголовки и открывает соединение через http.client.
Синтаксис
urllib.request.HTTPHandler(debuglevel=0)
Для запроса с data он сам ставит Content-Type: application/x-www-form-urlencoded и Content-Length, поэтому JSON надо отправлять с явным заголовком Content-Type: application/json — иначе сервер прочтёт тело как форму. Тело-строку он отвергает с TypeError. HTTPHandler(debuglevel=1) печатает весь обмен с сервером — удобно для отладки.
Примеры
import urllib.request
handler = urllib.request.HTTPHandler()
urllib.request.OpenerDirector().add_handler(handler)
req = urllib.request.Request('http://example.com/api', data=b'{"a": 1}')
handler.http_request(req) # готовит запрос, в сеть не ходит
print(req.get_header('Content-type'), req.get_header('Content-length'))
# → application/x-www-form-urlencoded 8
import urllib.request
req = urllib.request.Request('http://example.com/api', data='a=1')
try:
urllib.request.HTTPHandler().http_request(req)
except TypeError as e:
print(str(e)[:33]) # → POST data should be bytes, an ite
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности