1 HTTP Client
(require net/http-client) | package: base |
procedure
(http-conn? x) → boolean?
x : any/c
procedure
(http-conn-live? x) → boolean?
x : any/c
procedure
(http-conn-liveable? x) → boolean?
x : any/c
procedure
(http-conn) → http-conn?
procedure
(http-conn-open! hc host [ #:ssl? ssl? #:port port #:auto-reconnect? auto-reconnect?]) → void? hc : http-conn? host : (or/c bytes? string?) ssl? : base-ssl?-tnl/c = #f port : (between/c 1 65535) = (if ssl? 443 80) auto-reconnect? : boolean? = #f
If hc is live, the connection is closed.
procedure
(http-conn-open host [ #:ssl? ssl? #:port port #:auto-reconnect? auto-reconnect?]) → http-conn? host : (or/c bytes? string?) ssl? : base-ssl?-tnl/c = #f port : (between/c 1 65535) = (if ssl? 443 80) auto-reconnect? : boolean? = #f
procedure
(http-conn-close! hc) → void?
hc : http-conn?
procedure
(http-conn-abandon! hc) → void?
hc : http-conn?
procedure
(http-conn-enliven! hc) → void?
hc : http-conn?
procedure
(http-conn-send! hc uri [ #:version version #:method method #:close? close? #:headers headers #:content-decode decodes #:data data]) → void? hc : http-conn-liveable? uri : (or/c bytes? string?) version : (or/c bytes? string?) = #"1.1" method : (or/c bytes? string? symbol?) = #"GET" close? : boolean? = #f headers : (listof (or/c bytes? string?)) = empty decodes : (listof symbol?) = '(gzip deflate) data : (or/c false/c bytes? string? data-procedure/c) = #f
If data is a procedure, it will be called once with a procedure of one argument, which is a string or byte string to be written to the request body using chunked transfer encoding.
If headers does not contain an Accept-Encoding header, then a header indicating that encodings from decodes are accepted is automatically added.
If close? is #t and headers does not contain a Connection header, then a Connection: close header will be added (currently, 'gzip and 'deflate are supported).
This function does not support requests that expect 100 (Continue) responses.
Changed in version 7.6.0.9 of package base: Added support for 'deflate decoding.
procedure
(http-conn-recv! hc [ #:content-decode decodes #:method method #:close? close?])
→
bytes? (listof bytes?) input-port? hc : http-conn-liveable? decodes : (listof symbol?) = '(gzip deflate) method : (or/c bytes? string? symbol?) = #"GET" close? : boolean? = #f
Returns the status line, a list of headers, and an port which contains the contents of the response. The port’s content must be consumed before the connection is used further.
If close? is #t, then the connection will be closed following the response parsing. If close? is #f, then the connection is only closed if the server instructs the client to do so.
Changed in version 6.1.1.6 of package base: Added the #:method argument.
Changed in version 7.6.0.9: Added support for 'deflate decoding.
procedure
(http-conn-sendrecv! hc uri [ #:version version #:method method #:headers headers #:data data #:content-decode decodes #:close? close?])
→
bytes? (listof bytes?) input-port? hc : http-conn-liveable? uri : (or/c bytes? string?) version : (or/c bytes? string?) = #"1.1" method : (or/c bytes? string? symbol?) = #"GET" headers : (listof (or/c bytes? string?)) = empty data : (or/c false/c bytes? string? data-procedure/c) = #f decodes : (listof symbol?) = '(gzip deflate) close? : boolean? = #f
Changed in version 7.6.0.9 of package base: Added support for 'deflate decoding.
procedure
(http-sendrecv host uri [ #:ssl? ssl? #:port port #:version version #:method method #:headers headers #:data data #:content-decode decodes])
→
bytes? (listof bytes?) input-port? host : (or/c bytes? string?) uri : (or/c bytes? string?) ssl? : base-ssl?-tnl/c = #f port : (between/c 1 65535) = (if ssl? 443 80) version : (or/c bytes? string?) = #"1.1" method : (or/c bytes? string? symbol?) = #"GET" headers : (listof (or/c bytes? string?)) = empty data : (or/c false/c bytes? string? data-procedure/c) = #f decodes : (listof symbol?) = '(gzip deflate)
The HTTP connection is not returned, so it is always closed after one response, which is why there is no #:closed? argument like http-conn-recv!.
Changed in version 7.6.0.9 of package base: Added support for 'deflate decoding.
procedure
(http-conn-CONNECT-tunnel proxy-host proxy-port target-host target-port [ #:ssl? ssl?]) →
base-ssl?/c input-port? output-port? (-> port? void?) proxy-host : (or/c bytes? string?) proxy-port : (between/c 1 65535) target-host : (or/c bytes? string?) target-port : (between/c 1 65535) ssl? : base-ssl?/c = #f
The SSL context or symbol, if any, provided in ssl? is applied to the gateway ports using ports->ssl-ports (or ports->win32-ssl-ports).
The function returns four values:
If ssl? was #f then #f. Otherwise an ssl-client-context? that has been negotiated with the target.
If ssl? was a protocol symbol, then a new ssl-client-context? is created, otherwise the current value of ssl? is used.
An input-port? from the tunnelled service.
An output-port? to the tunnelled service.
An abandon function, which when applied to either returned port, will abandon it, in a manner similar to tcp-abandon-port.
The SSL context or symbol, if any, provided in ssl? is applied to the gateway ports using ports->ssl-ports (or ports->win32-ssl-ports) and the negotiated client context is returned.
value
(or/c boolean? ssl-client-context? symbol?).
If ssl? is not #f then ssl? is used as an argument to ssl-connect to, for example, check certificates.
value
(or/c base-ssl?/c (list/c base-ssl?/c input-port? output-port? (-> port? void?)))
1.1 Troubleshooting and Tips
1.1.1 How do I send properly formatted POST form requests?
You should send a Content-Type header with the value application/x-www-form-urlencoded and send the data formatted by net/uri-codec’s form-urlencoded-encode function. For example,
(http-conn-send! hc "/login" #:method "POST" #:data (alist->form-urlencoded (list (cons 'username "Ryu") (cons 'password "Sheng Long"))) #:headers (list "Content-Type: application/x-www-form-urlencoded"))