Chunked transfer request encoding for lowhaio. This is only needed if content-length
is unknown before the body starts to transfer.
pip install lowhaio lowhaio_chunked
or just copy and paste the below 8 lines of code into your project, ensuring to also follow the requirements in the LICENSE file.
def chunked(body):
async def _chunked(*args, **kwargs):
async for chunk in body(*args, **kwargs):
yield hex(len(chunk))[2:].encode() + b'\r\n'
yield chunk
yield b'\r\n'
yield b'0\r\n\r\n'
return _chunked
Usage is very similar to standard lowhaio, except that the body
data should be wrapped with the chunked
function; the transfer-encoding: chunked
header is required; and the content-length
header should not be specified.
So instead of a request like
from lowhaio import Pool
request, _ = Pool()
body = ...
code, headers, body = await request(
b'POST', 'https://example.com/path', body=body,
headers=((b'content-length', b'1234'),),
)
you can write
from lowhaio import Pool
from lowhaio_chunked import chunked # Or paste in the code above
request, _ = Pool()
body = ...
code, headers, body = await request(
b'POST', 'https://example.com/path', body=chunked(body),
headers=((b'transfer-encoding': b'chunked'),),
)