This package contains a HTTP client class, and related other classes.
The central class is http.HttpClient
. Request objects are created (http.HttpRequest
), passed to the client, and responses received (http.HttpResponse
).
This is illustrated in the following simple program :-
import net, http, io, lang
procedure main(a)
local url, hreq, hc, hres, out
a := a[1] | stop("URL expected")
url := URL(a) | stop("Invalid url: " || a)
url.scheme == ("http"|"https") | stop("Inappropriate url scheme: " || url.scheme)
# A stream for the resulting data
out := StringStream()
# A request object
hreq := HttpRequest().
set_url(url).
set_output_stream(out)
hc := HttpClient()
# Get the response object
hres := hc.retrieve(hreq) | stop(&why)
write("OK ", *out.str(), " bytes\n", to_string(hres, 3))
end
This produces output similar to the following :-
$ ./http http://www.google.com
OK 10611 bytes
object http.HttpResponse#2(
url=object net.URL#3(http://www.google.co.uk/?gfe_rd=cr&ei=jHHJV421IYbDaJCmodgJ)
status="HTTP/1.1 200 OK"
previous_response=
object http.HttpResponse#1(
url=object net.URL#1(http://www.google.com/)
status="HTTP/1.1 302 Found"
previous_response=&null
headers=
object datastruct.SortTable#3(
"Cache-Control"->list#111["private"]
"Content-Length"->list#114["259"]
"Content-Type"->list#112["text/html; charset=UTF-8"]
"Date"->list#115["Fri, 02 Sep 2016 12:33:16 GMT"]
"Location"->list#113["http://www.google.co.uk/?gfe_rd=cr&ei=jHHJV421IYbDaJCmodgJ"]
)
)
headers=
object datastruct.SortTable#4(
"Cache-Control"->list#133["private, max-age=0"]
"Content-Encoding"->list#136["gzip"]
"Content-Length"->list#138["4515"]
"Content-Type"->list#134["text/html; charset=ISO-8859-1"]
"Date"->list#131["Fri, 02 Sep 2016 12:33:16 GMT"]
"Expires"->list#132["-1"]
"P3P"->list#135["CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\""]
"Server"->list#137["gws"]
"Set-Cookie"->list#141["NID=85=aerKk58-jVx9pLIo-Yq-W6pRf28JDj8mmP1OvSPg19CMvjDIqYtGIDqiG1f34v395bbyP2Cqy8mA9qS4sFBKqeexxx-V0yeaxhluXCJOxssVFRBwzyfoddmIZ3BY2YfH; expires=Sat, 04-Mar-2017 12:33:16 GMT; path=/; domain=.google.co.uk; HttpOnly"]
"X-Frame-Options"->list#140["SAMEORIGIN"]
"X-XSS-Protection"->list#139["1; mode=block"]
)
)
The examples
directory contains two programs which use HttpClient
. The first is geturl
, which is a command-line tool to retrieve URLs. The second is browser
, which is a simple web browser. It makes use of ipl.browser.Browser
, which uses multiple asynchronous HttpClient
s (each running in an io.Task
) to download a particular web page and its images.