Source code for woob.tools.request

# flake8: compatible

from __future__ import annotations

import shlex

import requests

from woob.tools.json import json

__all__ = ['to_curl']


[docs]def to_curl(request: requests.PreparedRequest | dict) -> str: """Return a generated functional curl command based on a request. :param request: The prepared request, or property dictionary, to transform into a curl command. :return: The curl command, with UNIX newlines. """ if isinstance(request, requests.PreparedRequest): method: str = request.method url: str = request.url headers: dict[str, str] = request.headers body: bytes | None = request.body else: method = request['method'] url = request['url'] headers = json.loads(str(request['headers']).replace("'", '"')) body = request.get('body') parts = [ 'curl', '--compressed', # Decompress encoded data before stdout ] if method not in ('GET', 'POST'): parts += ('-X', method) for header, value in headers.items(): parts += ['-H', f'{header}:{value}'] if body: if isinstance(body, bytes): parts += ['-d', f'{body.decode("utf-8")}'] else: parts += ['-d', f'{body}'] parts += [f"{url}"] return shlex.join(parts)