GitHub official app icon on iOS is also configurable with ~40 variants.
HN user
jicea
GitHub
https://github.com/jcamiel
Hi maintainer of Hurl here, thanks for the link; Hurl is using libcurl as its HTTP engine (you can for instance use --curl to get an export of curl commands). In a few words, if you just use Hurl, you just use curl also...
If you're willing to use a CLI, you can try Hurl [1]. It's is an Open Source cli using libcurl to run and test HTTP requests with plain text. We use libcurl for the reliability, quickness and top features (HTTP/3 IPv6 for instance) and there are features like:
- requests chaining,
- capturing and passing data from a response to another request,
- response tests (JSONPath, XPath, SSL certs, redirects etc...)
There is nice syntax sugar for requesting REST/SOAP/GraphQL APIs but, at the core, it's just libcurl! You can export you files to curl commands for instance. (I'm one of the maintainers)
[1] https://hurl.dev
Postman is currently down: it gives you time to try Hurl [1] an open source CLI to tests APIs/HTTP request s with plain text. Hurl is built on curl, so it's super reliable, designed to be used in CI/CD. Give it a try!
[1] https://hurl.dev
I'm sorry I must be really tired I don't understand certains animations when playing programs: in the first program, the 3rd instruction is 'PRINTI $0'. The instruction description is "print the integer stored in $a to the console". We have a first animation, a 0 that goes to the console, and a second animation, a 0 that comes from memory... Is the order right? What does represent the second animation? I must miss something obvious here....
Would be super cool if we could run programs step by step also!
The app is really super clean, I like it a lot (compare to Bruno for instance, one of your "competitor"). I see in the README that "Yaak is open source, but only accepting contributions for bug fixes.". It's an understandable statement, but it seems that there is also no way to post issues on the GitHub repo. Is there any reason for this (people could post issues without ever wanting to contribute imo). Anyway good job, I hope you'll get some traction!
A simple GET with a status code is just
GET http://foo.com
HTTP 200
You could write also GET http://foo.com
HTTP *
[Asserts]
status == 200
HTTP serves as a marker of the response sectionWe used Hurl to go from a ktor web server to a spring boot rewrite (Java/Kotlin stack). It was a breeze to have a kind of specifications test suite independent of the server stack and helped us a lot in the transition.
Another benefit is we built a Docker image for production and wanted to have something light and not tight to the implementation for integration tests.
Maintainer here, thanks for the feedbacks. 6-7 years ago, when we started working on Hurl, we started with a JSON then a YAML file format. We gradually convinced ourself to write a new file format and I completely understand that it might feel weird. We tried (maybe not succeeded!) to have something simple for the simple case...
I'm really interested by issues with the documentation: it can always be improved and any issues is welcome!
Guilty to have created yet-another-format for HTTP client! To "mitigate" this issue, you can use `hurlfmt` (distributed along `hurl`) that would allow you to export a Hurl file to JSON. You could then go from this JSON to another... It's not magic but it can help if you're going to change from Hurl to another thing.
Ah ah ah thanks for this! There are a lot of Open Source projects from Orange => https://github.com/Orange-OpenSource
Ah sorry for both, the README sample is here from the start (4 years) ago that I didn't take time to read it with a fresh eye:
POST https://acmecorp.net/login?user=toto&password=1234
In the README is doing a POST request with user and paasword parameter in the URL. POST https://acmecorp.net/login
[Form]
user: toto
password: 1234
Is a more traditional POST with user and password in the body. Probably going to update the READMEs sample Issue created here [1]!Obviously better IDEs integration, support for gRPC, Websocket would be very cool.
A favorite of mine is to be available through official `apt`: there has been some work but it's kind of stuck. The Debian integration is the more difficult integration we have to deal. It's not Debian fault, there are a lot of documentation but we've struggled a lot and fail to understand the process.
If you're thinking about `--netrc` like curl it's already here [1]. If you're thinking about a proper Hurl config file, it's coming!
Hurl works only on the HTTP layer, there is no JavaScript engine. If your modal open a form that will trigger some kind of XHR, you'll "simulate" the HTTP traquets that the form modal could have done. Hurl is not a kind of Playwright for instance.
The POST in the README is going to send the params in the request body "url form encoded" like a form in a web page. There are more samples on the doc site [1].
Regarding curl, Hurl is just adding some syntax to pass data from request to request and add assert to responses. For a one time send & forget request, curl is the way, but if you've a kind of workflow (like accessing an authentified resource) Hurl is worth a try. Hurl uses libcurl under the hood and you've an option `--curl` to get a list of curl commands.
Hi Hurl maintainer here, happy to answer any question and get feedbacks!
Hi, maintainer of Hurl [1] here.
We're trying to write "simple" Rust as far as we can, without going into too much optimisation: very little lifetime usage, no async stuff (just classic multi-thread directly from the last sample of the Rust book), liberal usage of clone, no macros, reusing crates for C libcurl and libxml binding, limiting dependencies. We could certainly gain a lot of performances but with this first simple approach, the binary is already "fast"... The only advice I would give for someone going into Rust is to not try to optimise everything from the start to get a first "feeling" of the language.
If you're OK with a cli app, you can try Hurl [1], it's a cli based on curl and plain text, to run and test HTTP requests (I'm one of the maintainer)
[1] https://hurl.dev
Hurl's maintainer here,
you can add asserts on response body, headers, certificate etc with Hurl [1]:
GET https://example.org/api/tests/4567
HTTP 200
[Asserts]
header "x-foo" contains "bar"
certificate "Expire-Date" daysAfterNow > 15
ip == "2001:0db8:85a3:0000:0000:8a2e:0370:733"
jsonpath "$.status" == "RUNNING"
jsonpath "$.tests" count == 25
jsonpath "$.id" matches /\d{4}/
You can see how you can make various asserts here [2][1] https://hurl.dev
Hi, you may like Hurl [1] it's a cli based on curl to make REST call, add asserts on results, chains requests etc... I'm one of the maintainer
[1] https://hurl.dev
Genuine question: what's the GitLab equivalent of GitHub Actions?
I'm using GitHub Actions to easily reuse some predefined job setup (like installing a certain Python version on Linux, macOS, Windows runners). For these tyoe of tasks, I find GitHub actions very useful and convenient. If you want to reuse predefined jobs, written by someone else, with GitLab CI/CD, what can I use?
It's even nicer in Rust: there can be an "implicit" conversion between the error raised by foo and bar:
fn foo() -> Result<(),FooError>
bar()?
fn bar() -> Result<(),BarError>
If FooError can be created from BarError, the compiler will insert the conversion call and errors bubbles up nicely.Hi maintainers of Hurl here! We started very small also and HN helps us a lot to grow and gain popularity. Keep up the good work and the motivation!
The only advice I'll humbly give is to choose a "traditional" license, unless there is a very strong motivation to have a custom one.
I really like Armin "food for thought" articles and I'm also concerned with the dependencies attitude in Rust. I like the language a lot, but I cringe when I clone some project and see the number of dependencies... It's really a balance: when you add a dependency you get a lot of code for "free" but nothing is free: now you've potentially new bug/security failure/things to update. It's a balance.
On the article, two random thoughts:
- I like that the Rust standard lib is "tiny" and a lot of stuff is delegated to third-parties crates. I wish crates support namespaces (for instance std) so it's easier to see what dependencies are blesser. For the moment, you can obtain a good name, like http, and squat it forever (http being just an example, don't know if there is an actual crate)
- when you vendor a Rust project, does it vendor also the flag dependencies? For instance, Rand is dependent on Serde because of an optional flag for serializing a random generator. Serde loc should be ignored in that case if we count the code lines.
I maintain a Rust project that is ~50,000 loc [1]. I've never felt that compiling is slow, in the contrary it's always a pleasure to see how fast the project compiles (at least in debug).
In release, build time is longer but in this case, it's in the CI/CD so it doesn't bother me. We try to be very conservative with adding dependencies so it may help compilation time. Also I'm coming from a Java/Kotlin world so a lot of things appear like fresh air in comparison...
Bruno's pricing has changed recently, the lifetime offer is not available anymore. Prices tiers are: free, $6/month, $11/month [1]. Bruno's developers explained it was necessary to sustain Bruno's growth.
You may like Hurl [1]: it's an Open source cli based on curl (libcurl to be exact), to run and test HTTP requests with plain text (I'm one of the maintainers). We recently add --curl option to come back to curl. Give it a shout!
[1] https://hurl.dev
I don't understand why this is not the evident approach for everyone writing GitHub Actions/GitLab CI/CD yaml etc....
I've struggled in some teams to explained why it's better to extract your command in scripts (ShellCheck on it, scripts are simple to run locally etc...) instead of writing a Frankenstein of YAML and shell commands. I hope someday to find an authoritative guidelines on writing pipeline that promote this approach so at least I can point to this link instead of defending myself being a dinosaur!
As a maintainer of Hurl, I've been really curious about this product (while not affiliated at all)! It has been an interesting journey because I've seen how you can build something like this: first you start with a solid first simple iteration (just an editor of web script files), then slowly you add features around it and expand: a very good documentation, "chron" scripts, email alerts etc...
I'm using Skybear.net at work today to do web sites monitoring (SSL certificates and health check), simple but very effective... impressive for a one man work! I can see a future where (a lot of) other file format are supported (à la Postman, Bruno etc...), but I'm happy that Hurl has been chosen for starting.