Did you know ... | Search Documentation: |
library(http/http_header): Handling HTTP headers |
The library library(http/http_header)
provides
primitives for parsing and composing HTTP headers. Its functionality is
normally hidden by the other parts of the HTTP server and client
libraries.
end_of_file
if FdIn is at the end
of input.html_write.pl
file
, but do not include modification timeHdrExtra | provides additional reply-header
fields, encoded as Name(Value). It can also contain a field
content_length(-Len) to retrieve the value of the
Content-length header that is replied. |
Code | is the numeric HTTP status code sent |
Status can be one of the following:
basic(Realm)
digest(Digest)
authorise(basic(Realm))
. Deprecated.format('Content-type: <MIME type>~n')
. This hook is
called before
mime_type_encoding/2. This default defines utf8
for JSON and Turtle derived application/
MIME types.never
,
even explitic requests are ignored. If on_request
, chunked
encoding is used if requested through the CGI header and allowed by the
client. If
if_possible
, chunked encoding is used whenever the client
allows for it, which is interpreted as the client supporting HTTP 1.1 or
higher.
Chunked encoding is more space efficient and allows the client to start processing partial results. The drawback is that errors lead to incomplete pages instead of a nicely formatted complete page.
http_client.pl
to send the POST data to the server. Data is one of:
html(+Tokens)
Result of html//1
from html_write.pl
json(+Term)
Posting a JSON query and processing the
JSON reply (or any other reply understood by http_read_data/3)
is simple as
http_post(URL, json(Term), Reply, [])
, where Term is a JSON
term as described in json.pl
and reply is of the same
format if the server replies with JSON, when using module :- use_module(library(http/http_json))
.
Note that the module is used in both http server and http client, see
library(http/http_json)
.xml(+Term)
Post the result of xml_write/3
using the Mime-type
text/xml
xml(+Type, +Term)
Post the result of xml_write/3
using the given Mime-type and an empty option list to xml_write/3.xml(+Type, +Term, +Options)
Post the result of xml_write/3
using the given Mime-type and option list for xml_write/3.file(+File)
Send contents of a file. Mime-type is
determined by
file_mime_type/2.file(+Type, +File)
Send file with content of indicated
mime-type.memory_file(+Type, +Handle)
Similar to file(+Type, +File)
,
but using a memory file instead of a real file. See new_memory_file/1.codes(+Codes)
As codes(text/plain, Codes)
.codes(+Type, +Codes)
Send Codes using the indicated
MIME-type.bytes(+Type, +Bytes)
Send Bytes using the indicated
MIME-type. Bytes is either a string of character codes 0..255 or list of
integers in the range 0..255. Out-of-bound codes result in a
representation error exception.atom(+Atom)
As atom(text/plain, Atom)
.atom(+Type, +Atom)
Send Atom using the indicated
MIME-type.string(+String)
string(+Type, +String)
Similar to atom(Atom)
and atom(Type,Atom)
, accepting a SWI-Prolog string.cgi_stream(+Stream, +Len)
Read the input from Stream
which, like CGI data starts with a partial HTTP header. The fields of
this header are merged with the provided HdrExtra fields. The
first Len characters of Stream are used.form(+ListOfParameter)
Send data of the MIME type
application/x-www-form-urlencoded as produced by browsers issuing a POST
request from an HTML form. ListOfParameter is a list of Name=Value or
Name(Value).form_data(+ListOfData)
Send data of the MIME type multipart/form-data
as produced by browsers issuing a POST request from an HTML form using
enctype multipart/form-data
. ListOfData is the same as for
the List alternative described below. Below is an example. Repository,
etc. are atoms providing the value, while the last argument provides a
value from a file.
..., http_post([ protocol(http), host(Host), port(Port), path(ActionPath) ], form_data([ repository = Repository, dataFormat = DataFormat, baseURI = BaseURI, verifyData = Verify, data = file(File) ]), _Reply, []), ...,
set_cookie(Name, Value, Options)
.
Options is a list consisting of Name=Value or a single atom
(e.g., secure
)bytes(From, To)
, where From is an integer
and To is either an integer or the atom end
.media(Type, TypeParams, Quality, AcceptExts)
. The list is
sorted according to preference.disposition(Name, Attributes)
, where Attributes
is a list of Name=Value pairs.media(Type/SubType, Attributes)
, where
Attributes is a list of Name=Value pairs.As some fields are already parsed in the Request, this predicate is a no-op when called on an already parsed field.
Value | is either an atom, a list of codes or an already parsed header value. |
syntax_error(http_timestamp(Text))
if the string cannot be
parsed.-->
content_type(text/html)
domain_error(http_request_line, Line)
created(Location)
moved(To)
moved_temporary(To)
see_other(To)
bad_request(ErrorTerm)
authorise(AuthMethod)
forbidden(URL)
not_found(URL)
method_not_allowed(Method,URL)
not_acceptable(Why)
server_error(ErrorTerm)
unavailable(Why)
The hook is tried twice, first using the status term, e.g.,
not_found(URL)
and than with the code, e.g. 404
.
The second call is deprecated and only exists for compatibility.
Context | is the 4th argument of http_status_reply/5,
which is invoked after raising an exception of the format
http_reply(Status, HeaderExtra, Context) . The default
context is [] (the empty list). |
HTMLTokens | is a list of tokens as produced by html//1. It is passed to print_html/2. |