Skip to main content

convert curl/fetch command to python requests

Project description

GitHub Release PyPI Version Python Versions CI GPLv3+

convert-to-requests

convert curl/fetch command to python requests

Parse curl command (from "copy to cURL") or (w/ --fetch) fetch code (from "copy to fetch") from stdin and either execute the request using requests.request() (exec subcommand) or print Python code to do so (code subcommand).

curl

Get the code:

$ convert-to-requests code --pretty <<< "curl 'https://obfusk.ch' -H 'User-Agent: Mozilla/5.0'"
requests.request('GET', 'https://obfusk.ch', headers={
    'User-Agent': 'Mozilla/5.0'
})

Execute the request:

$ convert-to-requests exec -v <<< "curl 'https://obfusk.ch' -H 'User-Agent: Mozilla/5.0'" | head -2
GET https://obfusk.ch headers={'User-Agent': 'Mozilla/5.0'} data=None
<!DOCTYPE html>
<html lang="en">

POST works too:

$ convert-to-requests code <<< "curl 'https://example.com' -H 'User-Agent: Mozilla/5.0' -H 'Accept: application/json' -X POST --data-raw foo"
requests.request('POST', 'https://example.com', headers={'User-Agent': 'Mozilla/5.0', 'Accept': 'application/json'}, data=b'foo')

fetch

$ convert-to-requests --fetch code <<-END
fetch("https://example.com", {
  "headers": {
    "accept": "application/json"
  },
  "body": null,
  "method": "GET",
  "mode": "cors",
  "credentials": "omit"
});
END
Warning: ignoring mode=
Warning: ignoring credentials=
requests.request('GET', 'https://example.com', headers={'accept': 'application/json'})

Python API

>>> from convert_to_requests import curl_to_requests, to_python_code
>>> req = curl_to_requests(r"curl 'https://example.com' -X POST --data-raw $'\'foo\''")
>>> req
RequestData(method='POST', url='https://example.com', headers={}, data=b"'foo'", ignored=[])
>>> print(to_python_code(req.method, req.url, req.headers, req.data))
requests.request('POST', 'https://example.com', headers={}, data=b"'foo'")
>>> print(req.code())               # shorter alternative
requests.request('POST', 'https://example.com', headers={}, data=b"'foo'")
>>> import requests
>>> r = requests.request(req.method, req.url, headers=req.headers, data=req.data)
>>> r.raise_for_status()
>>> print(r.text, end="")
[...]
>>> print(req.exec().text, end="")  # shorter alternative
[...]
>>> from convert_to_requests import fetch_to_requests, to_python_code
>>> req = fetch_to_requests('''fetch("https://example.com", {"headers": {}, "method": "POST", "body": "'foo'"});''')
>>> req
RequestData(method='POST', url='https://example.com', headers={}, data=b"'foo'", ignored=[])
>>> print(to_python_code(req.method, req.url, req.headers, req.data))
requests.request('POST', 'https://example.com', headers={}, data=b"'foo'")
>>> from convert_to_requests import parse_dollar_string
>>> parse_dollar_string(r"$'\'foo\''")
("'foo'", '')

CAVEATS

fetch

Unfortunately, "copy as fetch" doesn't include cookies ("copy as Node.js fetch" does).

Chromium doesn't include a User-Agent header in either.

Installing

Using pip

$ pip install convert-to-requests

NB: depending on your system you may need to use e.g. pip3 --user instead of just pip.

From git

NB: this installs the latest development version, not the latest release.

$ git clone https://github.com/obfusk/convert-to-requests.git
$ cd convert-to-requests
$ pip install -e .

NB: you may need to add e.g. ~/.local/bin to your $PATH in order to run convert-to-requests.

To update to the latest development version:

$ cd convert-to-requests
$ git pull --rebase

Dependencies

  • Python >= 3.8 + requests.

Debian/Ubuntu

$ apt install python3-requests

License

GPLv3+

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

convert-to-requests-0.2.0.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

convert_to_requests-0.2.0-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

Details for the file convert-to-requests-0.2.0.tar.gz.

File metadata

  • Download URL: convert-to-requests-0.2.0.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for convert-to-requests-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ae56592c6410dc226950e26914633601718f741d937a070b8c85a804eb00f970
MD5 16aa30fed7ae3bd8d3a732b1fb166407
BLAKE2b-256 ec605ffd6c4f46b267e84aaf8cea6b1b6b6b2e9b3a8cc8d98f5c43ffbb64e9b1

See more details on using hashes here.

File details

Details for the file convert_to_requests-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for convert_to_requests-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 56289e2650586b7d9d6ec2f42835991b7aaea6054fd7c21fdfc0e9c885ac767a
MD5 6c8c9469cdcdc3eb6f5a923e1f7a7a2b
BLAKE2b-256 821ecb4963731e09319fa04eff5725614f249663da13b88c83cf314526a39d91

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page