Requests
The core elements of an HTTP request are the method
, url
, headers
and body
.
>>> req = httpx.Request('GET', 'https://www.example.com/')
>>> req
<Request [GET 'https://www.example.com/']>
>>> req.method
'GET'
>>> req.url
<URL 'https://www.example.com/'>
>>> req.headers
<Headers {'Host': 'www.example.com'}>
>>> req.body()
b''
Working with the request headers
The following headers have automatic behavior with Requests
instances...
Host
- AHost
header must always be included on a request. This header is automatically populated from theurl
, using theurl.netloc
property.Content-Length
- Requests including a request body must always include either aContent-Length
header or aTransfer-Encoding: chunked
header. This header is automatically populated ifcontent
is notNone
and the content is a known size.Transfer-Encoding
- Requests automatically include aTransfer-Encoding: chunked
header ifcontent
is notNone
and the content is an unkwown size.Content-Type
- Requests automatically include aContent-Type
header ifcontent
is set using the [Content Type] API.
Working with the request body
Including binary data directly...
>>> headers = {'Content-Type': 'application/json'}
>>> content = json.dumps(...)
>>> httpx.Request('POST', 'https://echo.encode.io/', content=content)
Working with content types
Including JSON request content...
>>> data = httpx.JSON(...)
>>> httpx.Request('POST', 'https://echo.encode.io/', content=data)
Including form encoded request content...
>>> data = httpx.Form(...)
>>> httpx.Request('PUT', 'https://echo.encode.io/', content=data)
Including multipart file uploads...
>>> form = httpx.MultiPart(form={...}, files={...})
>>> with httpx.Request('POST', 'https://echo.encode.io/', content=form) as req:
>>> req.headers
{...}
>>> req.stream
<MultiPartStream [0% of ...MB]>
Including direct file uploads...
>>> file = httpx.File('upload.json')
>>> with httpx.Request('POST', 'https://echo.encode.io/', content=file) as req:
>>> req.headers
{...}
>>> req.stream
<FileStream [0% of ...MB]>
Accessing request content
In progress...
>>> data = request.json()
...
>>> form = request.form()
...
>>> files = request.files()