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 #f 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 input 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 #f 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 #f 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:
- The first value is #f if ssl? is #f, otherwise it is an ssl-client-context? that has been negotiated with the target. In the latter case,
if ssl? is #t or a symbol, the ssl-client-context? is created with ssl-make-client-context, where #t means 'auto;
if ssl? is ssl-client-context?, it is used as is.
The second value is an input port from the tunnelled service.
The third value is an output port to the tunnelled service.
The fourth value is an abandon function, which when applied to either returned port, will abandon it, in a manner similar to tcp-abandon-port.
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"))