/usr/lib/swipl/library/http/http_stream.pl
AllApplicationManualNameSummaryHelp

  • library
    • http
      • http_unix_daemon.pl -- Run SWI-Prolog HTTP server as a Unix system daemon
      • thread_httpd.pl -- Threaded HTTP server
      • http_wrapper.pl -- Server processing of an HTTP request
      • http_header.pl -- Handling HTTP headers
      • http_stream.pl -- HTTP Streams
        • encoding_filter/3
        • http_chunked_open/3
        • http_is_chunked/1
        • http_chunked_flush/2
        • http_chunked_add_trailer/3
        • stream_range_open/3
        • multipart_open/3
        • multipart_open_next/1
        • cgi_open/4
        • cgi_property/2
        • cgi_set/2
        • cgi_discard/1
        • is_cgi_stream/1
      • http_exception.pl -- Map Prolog exceptions to HTTP errors
      • http_path.pl -- Abstract specification of HTTP server locations
      • http_dispatch.pl -- Dispatch requests in the HTTP server
      • http_host.pl -- Obtain public server location
      • http_ssl_plugin.pl -- SSL plugin for HTTP libraries
      • http_json.pl -- HTTP JSON Plugin module
      • http_client.pl -- HTTP client library
      • json.pl -- Reading and writing JSON serialization
      • http_open.pl -- HTTP client library
      • http_parameters.pl -- Extract parameters (GET and POST) from HTTP requests
      • http_multipart_plugin.pl -- Multipart form-data plugin
      • http_hook.pl -- HTTP library hooks
      • html_write.pl -- Write HTML text
      • html_quasiquotations.pl -- HTML quasi quotations
      • js_write.pl -- Utilities for including JavaScript
      • js_grammar.pl -- JavaScript grammar
      • http_server_files.pl -- Serve files needed by modules from the server
      • hub.pl -- Manage a hub for websockets
      • websocket.pl -- WebSocket support
      • http_session.pl -- HTTP Session management
      • mimetype.pl -- Determine mime-type for a file
      • http_cors.pl -- Enable CORS: Cross-Origin Resource Sharing
      • html_head.pl -- Automatic inclusion of CSS and scripts links
      • jquery.pl -- Provide JQuery
      • term_html.pl -- Represent Prolog terms as HTML
      • http_dyn_workers.pl -- Dynamically schedule HTTP workers.
      • http_files.pl -- Serve plain files from a hierarchy
      • http_dirindex.pl -- HTTP directory listings
      • json_convert.pl -- Convert between JSON terms and Prolog application terms
      • mimepack.pl -- Create a MIME message
 http_chunked_open(+RawStream, -DataStream, +Options) is det
Create a stream to realise HTTP chunked encoding or decoding. The technique is similar to library(zlib), using a Prolog stream as a filter on another streQam. Options:
close_parent(+Bool)
If true (default false), the parent stream is closed if DataStream is closed.
max_chunk_size(+PosInt)
Define the maximum size of a chunk. Default is the default buffer size of fully buffered streams (4096). Larger values may improve throughput. It is also allowed to use set_stream(DataStream, buffer(line)) on the data stream to get line-buffered output. See set_stream/2 for details. Switching buffering to false is supported.

Here is example code to write a chunked data to a stream

    http_chunked_open(Out, S, []),
    format(S, 'Hello world~n', []),
    close(S).

If a stream is known to contain chunked data, we can extract this data using

    http_chunked_open(In, S, []),
    read_stream_to_codes(S, Codes),
    close(S).

The chunked protocol allows for two types of out of band data. Each chunk may be associated with additional metadata. That is achieved using http_chunked_flush/2. The last chunk may be followed by HTTP header lines. That can be achieved by calling http_chunked_add_trailer/3 before closing the chunked stream.

After http_chunked_open/3, the encoding of DataStream is the same as the encoding of RawStream, while the encoding of RawStream is octet, the only value allowed for HTTP chunked streams. Closing the DataStream restores the old encoding on RawStream.

Errors
- io_error(read, Stream) where the message context provides an indication of the problem. This error is raised if the input is not valid HTTP chunked data.