convert curl commands to Python, JavaScript, PHP, R, Go, Rust, Dart, JSON, Ansible, Elixir
Convert cURL syntax to native Python, Go, PHP, JavaScript, R, Elixir and Dart HTTP code
https://curl.trillworks.com
$ npm install --save curlconverter
var curlconverter = require('curlconverter');curlconverter.toPython("curl 'http://en.wikipedia.org/' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8' -H 'Referer: http://www.wikipedia.org/' -H 'Cookie: GeoIP=US:Albuquerque:35.1241:-106.7675:v4; uls-previous-languages=%5B%22en%22%5D; mediaWiki.user.sessionId=VaHaeVW3m0ymvx9kacwshZIDkv8zgF9y; centralnotice_buckets_by_campaign=%7B%22C14_enUS_dsk_lw_FR%22%3A%7B%22val%22%3A%220%22%2C%22start%22%3A1412172000%2C%22end%22%3A1422576000%7D%2C%22C14_en5C_dec_dsk_FR%22%3A%7B%22val%22%3A3%2C%22start%22%3A1417514400%2C%22end%22%3A1425290400%7D%2C%22C14_en5C_bkup_dsk_FR%22%3A%7B%22val%22%3A1%2C%22start%22%3A1417428000%2C%22end%22%3A1425290400%7D%7D; centralnotice_bannercount_fr12=22; centralnotice_bannercount_fr12-wait=14' -H 'Connection: keep-alive' --compressed");
Returns a string of Python code like:
import requestscookies = { 'GeoIP': 'US:Albuquerque:35.1241:-106.7675:v4', 'uls-previous-languages': '%5B%22en%22%5D', 'mediaWiki.user.sessionId': 'VaHaeVW3m0ymvx9kacwshZIDkv8zgF9y', 'centralnotice_buckets_by_campaign': '%7B%22C14_enUS_dsk_lw_FR%22%3A%7B%22val%22%3A%220%22%2C%22start%22%3A1412172000%2C%22end%22%3A1422576000%7D%2C%22C14_en5C_dec_dsk_FR%22%3A%7B%22val%22%3A3%2C%22start%22%3A1417514400%2C%22end%22%3A1425290400%7D%2C%22C14_en5C_bkup_dsk_FR%22%3A%7B%22val%22%3A1%2C%22start%22%3A1417428000%2C%22end%22%3A1425290400%7D%7D', 'centralnotice_bannercount_fr12': '22', 'centralnotice_bannercount_fr12-wait': '14', }
headers = { 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'en-US,en;q=0.8', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8', 'Referer': 'http://www.wikipedia.org/', 'Connection': 'keep-alive', }
response = requests.get('http://en.wikipedia.org/', headers=headers, cookies=cookies)
I'd rather write programs to write programs than write programs.
Dick Sites, Digital Equipment Corporation, September 1985
Make sure you're running node 12 or greater. The test suite will fail on older versions of node.
If you add a new generator, make sure to update the list of supported languages in cli.js or else it won't be accessible from the command line. Further, you'll want to update test.js and index.js for your new generator to make it part of the testing.
If you want to add new functionality, start with a test.
fixtures/curl_commandswith a descriptive filename like
post_with_headers.txt
fixtures/python_output/with a matching filename (but different extension) like
post_with_headers.py
npm test.
util.jsor the generators in
generators/
The parser generates a generic data structure consumed by code generator functions.
You can run a specific test with this command:
node test.js --test=test_name
where "testname" is a file (without extension) in `fixtures/curlcommands`
You can run a specific test with this command:
node test.js --language=R
I recommend setting this up with a debugger so you can see exactly what the parser is passing to the generator.
Here's my Intellij run configuration for a single test:
Before submitting a PR, please check that your JS code conforms to the code style enforced by standardjs. Use the following to fix your code if it doesn't:
$ standard --fix my_file.js
If you get stuck, please reach out via email. I am always willing to hop on a google hangout and pair program.
MIT © Nick Carneiro