[HN Gopher] Hurl: Run and test HTTP requests with plain text
___________________________________________________________________
Hurl: Run and test HTTP requests with plain text
Author : delduca
Score : 91 points
Date : 2022-11-25 16:40 UTC (6 hours ago)
(HTM) web link (hurl.dev)
(TXT) w3m dump (hurl.dev)
| theptip wrote:
| I recently found a BDD style tool that has native HTTP
| comprehension, which seems like it hits a similar area in the
| testing concept space:
|
| https://github.com/karatelabs/karate
| account-5 wrote:
| When would you use this over just curl? Genuine question. I like
| plain text where I can use it, but don't understand the benefit
| of this over curl.
| jicea wrote:
| My two cents (as a developer of Hurl):
|
| - chaining requests,
|
| - passing data from a request to another (with captures or with
| cookies, each file being its own cookie session),
|
| - gettings resources and checking payload SHAS
|
| - checking responses (JSONPath, XPath on body response, headers
| etc...)
|
| - retry / polling scenarios (polls until a resource is created
| for instance)
|
| - comments things (we use Hurl as documentation for APIs
| workflows)
|
| You can do these things using scripts and curl of course. We
| appreciate having a tool that works locally on Windows / macOS
| / Linux and integrates nicely in CI/CD. Hurl uses a (very
| small) fragment of libcurl. curl is much much powerfull, we
| love it.
| account-5 wrote:
| Thanks for the quick reply. I've used curl on windows before
| calling it from AHK for quick dirty one off scripts. Hurl
| could replace that with the ability to chain requests.
| Thanks.
| justonemore3 wrote:
| Can't this not be easily done using curl | xargs | jq + bash
| chained as often as you like
| jicea wrote:
| Emulating an HTTP session (with cookies passing) between
| request is more complicated for instance. Retry based on
| response content is doable but easier with a declarative
| format. jq is perfect for JSON response, what about
| HTML/XML response? Our testers prefer to write a text based
| declarative test, instead of a Bash script. It depends on
| your needs/backgrounds.
| andrewfromx wrote:
| Written in rust, lets you define a series of http urls to hit and
| assert info about what's returned. i.e. a count of items in a
| json array, or a string value of one specific json string.
| [deleted]
| dang wrote:
| Related:
|
| _Show HN: Hurl - Run and test HTTP requests with plain text,
| curl and Rust_ - https://news.ycombinator.com/item?id=28758226 -
| Oct 2021 (49 comments)
|
| -------
|
| Edit: these are apparently not the same thing (thanks to johns
| for pointing this out):
|
| _Show HN: Hurl.it is back - Make HTTP Requests_ -
| https://news.ycombinator.com/item?id=27026178 - May 2021 (15
| comments)
|
| _Show HN: Hurl - Run and test HTTP requests_ -
| https://news.ycombinator.com/item?id=25655737 - Jan 2021 (11
| comments)
|
| _Make HTTP requests from your browser_ -
| https://news.ycombinator.com/item?id=3439653 - Jan 2012 (66
| comments)
|
| _Hurl is back:http://hurl.it/_ -
| https://news.ycombinator.com/item?id=1881945 - Nov 2010 (2
| comments)
|
| _Hurl_ - https://news.ycombinator.com/item?id=1311146 - May 2010
| (31 comments)
|
| _Hurl_ - https://news.ycombinator.com/item?id=818648 - Sept 2009
| (31 comments)
| johns wrote:
| Hurl.it is not the same. All the posts from before Oct. 2021
| are a different thing.
| dang wrote:
| Oops! Thanks! I've edited the GP to make that clear.
| mstade wrote:
| Not two days ago I had the thought that it'd be so nice if I
| could write tests that were just plain text HTTP requests, and
| that the assertions would be just be comparing the responses to
| stored plain text HTTP responses, kind of like how snapshot
| assertions works in the React world. From a cursory glance this
| looks even better than what I had in mind, can't wait to give it
| a spin.
|
| Thank you so much for sharing!
| prhrb wrote:
| Very useful
| ccakes wrote:
| Not as usable for testing, but verb.el[1] is a great tool for
| doing something very similar in org-mode
|
| [1] https://github.com/federicotdn/verb
| gregwebs wrote:
| A better url might be https://hurl.dev/
|
| Hurl runs super fast without startup latency unlike a lot of
| tools in this category written in node. The plain text format can
| be checked in and this can be part of your CI process. Hurl can
| capture data from previous requests to run workflows and serve as
| a testing tool. The main downside is the lack of a GUI, although
| I imagine it being not that hard to do something like make a
| plugin for VSCode that will add a run button to the text file and
| display the result in the editor.
| dang wrote:
| Ok, we've changed to that from https://github.com/Orange-
| OpenSource/hurl. Thanks!
| xemoka wrote:
| re:VSCode; There pretty much already is one, looks fairly
| similar formatting too:
| https://marketplace.visualstudio.com/items?itemName=humao.re...
| ploppyploppy wrote:
| Love this tool. Was very useful at a previous place and its Rust
| APIs were easy to extend
| guilhas wrote:
| Some how I did small test and liked httpyac better, for being
| able to import requests from other files
|
| https://httpyac.github.io
|
| Anyone compared both and have an opinion?
| ilyt wrote:
| IntelliJ have that feature builtin IIRC
| lol768 wrote:
| Yeah, this was my initial thought. It reminded me of its REST
| API format, which supports post-response scripts (written in
| JS) to e.g. set a variable up for an access token after an
| OAuth exchange. Hurl's post-response handling seems a bit
| limited in comparison.
|
| I'm not sure if it can do the sort of web scraping (from the
| DOM) that Hurl claims to support, though. I guess you can run
| Hurl in CI, too.
|
| It's a very good way to show folks how to use an API, and I try
| to check in these files to VCS. You can also write test
| assertions with it and it also supports environment-based
| secrets.
| jicea wrote:
| Hi I'm one of the maintainer of Hurl! You can capture data
| from the DOM using XPath and inject it in next requests
| (classic example being a CSRF token for instance). One thing
| to have in mind is that Hurl is working on the HTTP level,
| there is no JavaScript engine, you get what the network gives
| you, like curl.
|
| There are a lot of similar tools (see this thread
| https://news.ycombinator.com/item?id=33287137#33296902), we
| try to focus on: simple plain text format, CI/CD integration,
| fast multi-platform CLI. Plenty of options
| hankchinaski wrote:
| Nice tool. I'm just wary of learning custom syntax. Maybe could
| use the same primitive of existing unix tools and make the whole
| a lot more orthogonal and frictionless. Jq syntax for parsing
| json, awk for text
| javajosh wrote:
| You can get a worse version of this functionality out of
| IntelliJ's http client[0]. Hurl seems better for several reasons,
| although I wish there was an example showing a few more useful
| tricks:
|
| 1 - When the content of a JSON variable is an XML string, or a
| JSON string, detect this and format white space for readability.
|
| 2 - Support pulling either the entire request or just the body
| from a file, and looping over all files in a directory.
|
| 3 - Pull data out of a response, put it in an environment used by
| later lines in the script.
|
| 0 - https://www.jetbrains.com/help/idea/http-client-in-
| product-c...
| smartmic wrote:
| I recently switch from custom Bash wrappers around curl to
| restclient.el [1]. It has similar features. Especially nice is
| the integration with jq for fetching specific data (or inspection
| of results with jq-mode). And, whoever is inclined to appreciate
| it, the fact that I can stay within Emacs. No need to get
| familiar with a new UI/UX.
|
| [1]: https://github.com/pashky/restclient.el
___________________________________________________________________
(page generated 2022-11-25 23:00 UTC)