1 HTTP Client
Identifies an HTTP connection.
Identifies an HTTP connection that is "live", i.e. one for which
http-conn-send! is valid.
Returns a fresh HTTP connection.
Uses
hc to connect to
host on port
port
using SSL if
ssl? is not
#f (using
ssl? as
an argument to
ssl-connect to, for example, check
certificates.)
If hc is live, the connection is closed.
Closes hc if it is live.
Closes the output side of hc, if it is live.
Sends an HTTP request to hc to the URI uri using
HTTP version version the method method and the
additional headers given in headers and the additional data
data.
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.
This function does not support requests that expect
100 (Continue) responses.
Parses an HTTP response from hc, while decoding the encodings
listed in decodes.
Returns the status line, a list of headers, and an port which contains
the contents of the response.
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.
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!.
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-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")) |