Plasma GitLab Archive
Projects Blog Knowledge

Module Http_fs


module Http_fs: sig .. end
HTTP filesystem


This module makes an HTTP file server accessible via a Netfs.stream_fs object, supporting

  • reading files
  • identifying and reading directories (if the server generates index pages for directories, see below for more information)
  • writing files (if the server implements PUT)
  • removing files (if the server implements DELETE)
One has to specify a base URL b, and the access of a file with path p is translated to the URL b ^ p. Note that p cannot include web parameters ("?" strings), and hash marks are also not supported.

A directory is recognized by appending a slash to the URL, and checking whether the URL exists.

The contents of a directory are determined by loading the directory URL, analyzing the HTML page, and checking for the presence of hyperlinks that do not contain slashes (or at most a trailing slash). Only hyperlinks of "A" elements are accepted.

Almost every web server can be configured to generate directory listings that conform to this format. For example, Apache provides this through the module mod_autoindex.

There is an extension to this class for WebDAV:

  • Webdav provides an extension of Http_fs for the full WebDAV set of filesystem operations


Examples



Read an HTTP directory:

       let fs = new http_fs ~streaming:true "http://localhost/~gerd"
       let files = fs # readdir [] "/"
    

Download a file into a string:

       let ch = fs # read [] "/file"
       let s = Netchannels.string_of_in_obj_channels ch
    

Copy a file hierarchy to the local disk:

       let lfs = Netfs.local_fs()
       Netfs.copy_into (fs :> Netfs.stream_fs) "/tree" lfs "/tmp"
    

Use globbing:

       let fsys = Netglob.of_stream_fs (fs :> Netfs.stream_fs)
       let files = Netglob.glob ~fsys (`String "/*.gif")
    


Extended stream_fs type



There is the new flag `Header for read and write, and the new method last_response_header for getting the response header of the most recently executed operation.
type read_flag = [ `Binary
| `Dummy
| `Header of (string * string) list
| `Skip of int64
| `Streaming ]
type read_file_flag = [ `Binary | `Dummy | `Header of (string * string) list ] 
type write_flag = [ `Binary
| `Create
| `Dummy
| `Exclusive
| `Header of (string * string) list
| `Streaming
| `Truncate ]
type write_file_flag = [ `Binary
| `Create
| `Dummy
| `Exclusive
| `Header of (string * string) list
| `Link
| `Truncate ]
class type http_stream_fs = object .. end

The class


class http_fs : ?config_pipeline:Http_client.pipeline -> unit -> ?streaming:bool -> ?tmp_directory:string -> ?tmp_prefix:string -> ?path_encoding:Netconversion.encoding -> ?enable_read_for_directories:bool -> ?enable_ftp:bool -> string -> http_stream_fs
http_fs base_url: Accesses the HTTP file system rooted at base_url.
val http_fs : ?config_pipeline:(Http_client.pipeline -> unit) ->
?streaming:bool ->
?tmp_directory:string ->
?tmp_prefix:string ->
?path_encoding:Netconversion.encoding ->
?enable_read_for_directories:bool ->
?enable_ftp:bool -> string -> http_stream_fs
Same as normal function
This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml