-
-
Save ctolsen/5679e874719de7500a0b to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3 | |
import sys | |
import os | |
def curl_to_ab(curl_cmd: list, num: int=200, cur: int=4) -> str: | |
""" | |
Translate a cURL command created by Chrome's developer tools into a | |
command for ``ab``, the ApacheBench HTTP benchmarking tool. | |
Parameters | |
---------- | |
curl_cmd | |
The string given to you by the "Copy to cURL" context action in | |
Chrome's developer tools. | |
num : int | |
The number of requests ApacheBench should make in total | |
cur : int | |
The number of concurrent requests ApacheBench should make | |
Note | |
---- | |
Not all headers play nice with ApacheBench, so ``headers_to_copy`` has | |
been set to a reasonable default. Tweak this if you need something | |
else in there. | |
""" | |
url = curl_cmd[1] | |
headers_to_copy = [ | |
'Origin', | |
'Authorization', | |
'Accept' | |
] | |
headers = [] | |
for i, part in enumerate(curl_cmd): | |
if part == '-H': | |
header = curl_cmd[i+1] | |
if any([h in header for h in headers_to_copy]): | |
headers.append("'{}'".format(header)) | |
cmd = ['ab -n {} -c {}'.format(num, cur)] | |
cmd += ['-H {}'.format(part) for part in headers] | |
cmd.append("'{}'".format(url)) | |
return ' '.join(cmd) | |
if __name__ == '__main__': | |
"""Usage: python curl_to_ab.py <cURL command from Chrome> | |
""" | |
os.system(curl_to_ab(sys.argv[1:])) |
I wasn't expecting google to find something this perfect ❤️
@ctolsen Thanks for sharing! I had to slightly tweak it so that it used my current session (I was testing an authenticated URL)
https://gist.github.com/etagwerker/eeb54fa1fdcd8ea6d5b9b168fdfa9952
Helped me a lot so I published it online to be more easy to use.
-> https://curl2ab.ahivert.dev
@ahivert, that is awesome, but please update the output command to take the URL in quotes. Otherwise it blows up in the command line, especially for URLs with parameters like http://foo.bar/path?param1=value2¶m2=value2
Thanks @pokrovskyy I fixed it
@ctolsen Thanks for sharing!
@ahivert it doesnt work with POST requests.
❤️ it, thanks!
Forked to add support for POST data using a temp file (Chrome uses --data-binary
and --data-raw
for POST): https://gist.github.com/odony/93086f5c917e777cb2f4d0c04d477545
@ahivert
https://curl2ab.ahivert.dev/ has erorr and does not working
src.e406c71d.js:5 Uncaught ReferenceError: curlInpu is not defined
Also, i forkd repo and fixed error. Now, curl2ab available on https://kaspiman.github.io/curl2ab/
not all heros wear capes!