Yesterday I released http-easy, a high-level HTTP client for Racket. I started working on it after getting annoyed at some of the code in my racket-sentry package. The same day I wrote that code, someone started a mailing list thread asking for a "practical" HTTP client so that served as additional motivation to spend some time on this problem.
Here's a basic example:
(require net/http-easy) (response-xexpr (get "https://example.com"))
It might not seem like much, but even just that gets you automatic
connection pooling. Want to stream response bodies instead of reading
them up front? Just pass in
#t for the
(define inp (response-output (get "https://example.com" #:stream? #t))) (read-bytes 10 inp)
JSON somewhere? Use the
#:json keyword argument:
(post #:json (hasheq 'hello "world") "https://example.com")
Need to upload a file? It's got you covered:
(post #:data (multipart-payload (file-part "f" (open-input-file "example-1.txt")) (file-part "f" (open-input-file "example-2.txt"))) "https://example.com")
You can find these examples and more in the documentation. The only big feature that's currently missing is proxy support, but I plan to add that soon. The library is pre-1.0 so, if you do start using it, keep in mind that its API might change before it stabilizes.