Add initial REST script
This commit is contained in:
parent
6e44281278
commit
0ac80f28bb
111
home/bin/REST
Executable file
111
home/bin/REST
Executable file
|
@ -0,0 +1,111 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""REST: Simple command line interface to testing RESTful services.
|
||||||
|
|
||||||
|
usage: REST [-h] [--cookie COOKIE] [--header HEADER] [--data DATA]
|
||||||
|
{GET,POST,PUT,PATCH,DELETE} url
|
||||||
|
|
||||||
|
REST API Tester
|
||||||
|
|
||||||
|
positional arguments:
|
||||||
|
{GET,POST,PUT,PATCH,DELETE}
|
||||||
|
The HTTP method to use
|
||||||
|
url The URL to request
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--cookie COOKIE, -c COOKIE
|
||||||
|
Specify an HTTP cookie value in NAME=VALUE format.
|
||||||
|
--header HEADER, -H HEADER
|
||||||
|
Add custom HTTP request headers in 'Name: Value'
|
||||||
|
format.
|
||||||
|
--data DATA, -d DATA JSON data to be sent with the request.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
REST GET http://localhost/v1/resource/item
|
||||||
|
REST POST http://localhost/v1/resource -d '{"hello": "world"}'
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description="REST API Tester")
|
||||||
|
parser.add_argument(
|
||||||
|
"--cookie", "-c",
|
||||||
|
action="append",
|
||||||
|
help="Specify an HTTP cookie value in NAME=VALUE format.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--header", "-H",
|
||||||
|
action="append",
|
||||||
|
help="Add custom HTTP request headers in 'Name: Value' format.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--data", "-d",
|
||||||
|
default=None,
|
||||||
|
help="JSON data to be sent with the request.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"method",
|
||||||
|
help="The HTTP method to use",
|
||||||
|
choices=["GET", "POST", "PUT", "PATCH", "DELETE"],
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"url",
|
||||||
|
help="The URL to request",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Convert cookie/header params.
|
||||||
|
if args.header:
|
||||||
|
args.header = strings_to_dict(args.header, ":")
|
||||||
|
if args.cookie:
|
||||||
|
args.cookie = strings_to_dict(args.cookie, "=")
|
||||||
|
|
||||||
|
do_http(args)
|
||||||
|
|
||||||
|
|
||||||
|
def do_http(args):
|
||||||
|
result = None
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
}
|
||||||
|
if args.header:
|
||||||
|
headers.update(args.header)
|
||||||
|
|
||||||
|
result = getattr(requests, args.method.lower())(
|
||||||
|
args.url,
|
||||||
|
headers=headers,
|
||||||
|
cookies=args.cookie,
|
||||||
|
data=args.data,
|
||||||
|
)
|
||||||
|
|
||||||
|
print args.method, args.url, result.status_code
|
||||||
|
|
||||||
|
# JSON response?
|
||||||
|
try:
|
||||||
|
parsed = result.json
|
||||||
|
print json.dumps(parsed,
|
||||||
|
sort_keys=True,
|
||||||
|
indent=4,
|
||||||
|
separators=(',', ': '),
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
print result.text
|
||||||
|
|
||||||
|
|
||||||
|
def strings_to_dict(strings, separator):
|
||||||
|
"""Turn a list of key/value pairs into a dictionary."""
|
||||||
|
result = dict()
|
||||||
|
for item in strings:
|
||||||
|
k, v = item.split(separator)
|
||||||
|
k = k.strip()
|
||||||
|
v = v.strip()
|
||||||
|
result[k] = v
|
||||||
|
return result
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user