5 ms·
And yet, curl is always available, widely supported by various "Copy as curl" features in debuggers and proxies and it also makes zero assumptions about content
by pilif 11y ago
And yet, curl is always available, widely supported by various "Copy as curl" features in debuggers and proxies and it also makes zero assumptions about content-types of form data you might want to post, so it's always very clear what's going to be posted.
It also follows unix conventions in option placement and syntax, so there's never any cognitive hurdle to cross when the question arises where to put headers, where to put form data, where to put query string data, how to handle the case of query string data being supplied using overlapping methods and what the form data is encoded in.
It also doesn't force me to write json in yet another syntax that's command-line friendly. Instead I can just write json.
Yes. HTTPie looks nicer, but the wide availability of curl and the much more predictable syntax make it a better tool for my taste.
If I need formatted JSON output, I can always pipe the result in to jq.
- balac 11y agoYou don't have to stop using curl because httpie is available. I find httpie very intuitive for my own use, but would share curl commands with other devs as it is ubiquitous.
- cellover 11y agoI did not know about jq, thanks! Without jq, you can still pipe to python json.tool module: $ curl http://domain.com http://domain.com | python -m json.tool
- _Codemonkeyism 11y agoI often use jq to extract data from REST apis, e.g. email addresses I need in a CSV file.
- agumonkey 11y agojq is almost a full fledge programming language, like xquery, surprisingly powerful (in good and bad ways). Nice to port fragile sed-grep LoC.
- 100k 11y agoI used to do this, but now I use jq. The thing about the Python version is that Python doesn't have ordered dictionaries, so the output isn't in the same order as the raw JSON. jq doesn't have that issue which is nice.
- batbomb 11y agoPython does have ordered dictionaries, but the json decoder defaults to regular dictionaries. This is easily overridable with JSONDecoder.
- 100k 11y agoIs there a one-liner you can use from the shell that preserves order?
- hnov 11y agoStarting with 3.5[0] that's the standard behavior. One liner-wise, you could create an alias echo '{"foo":12, "bar": 11}' | python -c 'import json as j, collections as c, sys as s; j.dump(j.load(s.stdin, object_pairs_hook=c.OrderedDict), s.stdout, indent=4)' [0] https://github.com/python/cpython/blob/3.5/Lib/json/tool.py#L40-L41 https://github.com/python/cpython/blob/3.5/Lib/json/tool.py#...
- deleted 11y ago[deleted]
- empath75 11y agoI wouldn't use this for scripting, but if I'm troubleshooting a rest endpoint or something, it might be useful.
- kaonashi 11y agoCurl's api is turrible.
- deleted 11y ago[deleted]
- dpflan 11y agocurl + jq is a very nice combination. Here is the jq project page and a discussion on HN about it. 1. jq project page: https://stedolan.github.io/jq/ https://stedolan.github.io/jq/ 2. jq HN Discussion: https://news.ycombinator.com/item?id=9446980 https://news.ycombinator.com/item?id=9446980 This comment from the jq HN submission discusses httpie, jq, and httpie vs. curl: https://news.ycombinator.com/item?id=9447175 https://news.ycombinator.com/item?id=9447175
- snockerton 11y agoI concur - I've tried to like httpie, but always end up going back to curl since its syntax is permanently ingrained in my fingers.
- XorNot 11y agoNot in my experience. wget is always available on default installs, whereas curl I have to specifically install.
- michaelcampbell 11y agoSo is vi. I still use emacs. Using only tools based on ubiquity is rather short sighted.
- zatkin 11y agoCan we not argue about vi(m) vs. emacs? Thank you. :-)
- broodbucket 11y agoThat wasn't really the point. I think they're saying that just because a tool is ubiquitous doesn't mean that it's objectively the best tool for the job in all cases. Just as vi and Emacs coexist, curl's existence doesn't make httpie pointless.