libcurl is a simple wrapper around the libcurl easy functions for
libcurl v7.73.0 or later.
curl-easy-setopt accepts multiple keyword-argument pairs where the
keyword can be
:CURLOPT_name or just
name is a case-insensitive libcurl option.
There are two extra options,
supplying an input handle or output handle respectively when
performing a transfer. The default is for libcurl to use stdin and
import libcurl curl := (curl-easy-init) ;; You can use booleans for (obvious?) boolean options ;; cf. curl -L curl-easy-setopt curl :FOLLOWLOCATION #t ;; In case the TLS cert is banjaxed ;; cf. curl -k curl-easy-setopt curl :SSL_VERIFYHOST #f :SSL_VERIFYPEER #f curl-easy-setopt curl :URL "https://idio-lang.org" ;; Here's the interesting bit. If we want to collect the output we ;; need to supply an output handle. In this example, we'll use a ;; string handle: osh := (open-output-string) curl-easy-setopt curl :writer osh curl-easy-perform curl str := get-output-string osh printf "The webpage was %d chars\n" (string-length str)
$ idio libcurl-GET The webpage was 5453 chars
As a slight spin on the above test, we could use a pipe handle for our
wc -c as the pipeline to achieve something similar:
import libcurl curl := (curl-easy-init) curl-easy-setopt curl :FOLLOWLOCATION #t curl-easy-setopt curl :SSL_VERIFYHOST #f :SSL_VERIFYPEER #f curl-easy-setopt curl :URL "https://idio-lang.org" printf "wc -c: " oph := pipe-into wc -c curl-easy-setopt curl :writer oph curl-easy-perform curl ;; XXX curl does not close the writer and wc -c will be blocked ;; reading stdin. close-handle oph
$ idio libcurl-pipe wc -c: 5464
Why do the counts differ by one? Sphinx has added a
transiently-hidden Pilcrow, ¶ U+00B6, at the end of the title,
Idio. Idio was counting characters and wc was
counting bytes. If your wc supports it, you can try
-m to count characters instead.
For a PUT example, you would set
:reader to an input handle and
:UPLOAD to true.
Last built at 2023-11-09T07:11:44Z+0000 from 77077af (dev) for Idio 0.3