quaeso

python cli program to send requests

MIT License

Downloads
63
Stars
77
Committers
1

Is it just me or is curl a little too complicated? Want something simpler in life? something made for humans? Try quaeso -- A Python program that reads a json/yml file for request data and sends the request

Installation

pip install this repo. (Note: Incompatible with Python 2.x)

pip3 install quaeso

(or)

pip install quaeso

Usage example

To get help with commandline arguments

quaeso --help

Using Command-line Arguments

quaeso -f "some/folder/myrequest.yml"

(or)

quaeso -f "some/folder/myrequest.json"

Colorize Output

quaeso -f "some/folder/myrequest.yml" -c

Disclaimer

sometimes the quaeso command doesn't work in windows if the package is installed globally.

to avoid this, install the package in a local virtual env

first, create a env

python3 -m venv env_for_quaeso

activate that env

.\env_for_quaeso\Scripts\activate

and then pip install. But you will have to activate that env everytime you want to use quaeso.

IO Redirection

the response is written to stdout and headers/status are written to stderr so that users can take IO redirection to their advantage. This works on windows, linux and mac.

quaeso -f "some/folder/myrequest.yml" > res.json 2> res_headers.txt

both stdout and stderr can be redirected to the same file

quaeso -f "some/folder/myrequest.yml" > res.txt 2>&1

Sample request file (myrequest.yml)

GET

url: https://cdn.animenewsnetwork.com/encyclopedia/api.xml?anime=4658
method: get
params:
  offset: 2
  limit: 100
headers:
  accept: text/xml
  accept-language: en
timeout: 5000

File Download (quaeso -f "some/folder/myrequest.yml" > book.pdf)

url: http://do1.dr-chuck.com/pythonlearn/EN_us/pythonlearn.pdf
method: get

POST

url: https://jsonplaceholder.typicode.com/todos/
method: POST
headers:
  Authorization: Basic bXl1c2VybmFtZTpteXBhc3N3b3Jk
  content-type: application/json
data:
  title: walk the dog
  completed: false
timeout: 5000

PUT

url: https://jsonplaceholder.typicode.com/todos/1
method: PUT
headers:
  content-type: application/json
data:
  title: walk the dog
  completed: true
timeout: 5000

DELETE

url: https://jsonplaceholder.typicode.com/todos/1
method: DELETE

Complete request file with all available fields (myrequest.yml)

method: XXX # (REQUIRED) GET, OPTIONS, HEAD, POST, PUT, PATCH, or DELETE
url: XXX # (REQUIRED) must be prefixed with http:// or https://

params: # url query parameters. have as many as you like
  offset: 0
  limit: 10

data: # data for POST
  name: john
  age: 22
  hobbies:
    - running
    - eating
    - sleeping

# you can also type data in json format instead of yaml
data: |
  {
    "name": "john",
    "age": 22,
    "hobbies": ["running", "eating", "sleeping"]
  }

headers: # have as many as you like
  Content-Type: application/json
  Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


cookies: # have as many as you like
  mycookie: cookievalue
  myothercookie: othercookievalue

timeout: 3.14 # seconds

allow_redirects: true # true or false

proxies: # have as many as you like
  http: http://10.10.1.10:3128
  https: https://10.10.1.11:1080
  ftp: ftp://10.10.1.10:3128

# EITHER verify server's TLS certificate. true or false
verify: true
# OR path to a CA bundle to use
verify: some/folder/cacert.crt

# EITHER path to single ssl client cert file (*.pem)
cert: some/folder/client.pem
# OR (*.cert), (*.key) pair.
cert:
  - some/folder/client.cert
  - some/folder/client.key

Development setup

Clone this repo and install packages listed in requirements.txt

pip3 install -r requirements.txt

Meta

M. Zahash – [email protected]

Distributed under the MIT license. See LICENSE for more information.

https://github.com/zahash/

Contributing

  1. Fork it (https://github.com/zahash/quaeso/fork)
  2. Create your feature branch (git checkout -b feature/fooBar)
  3. Commit your changes (git commit -am 'Add some fooBar')
  4. Push to the branch (git push origin feature/fooBar)
  5. Create a new Pull Request