打开可下载的文件

Sof*_*mur 2 ocaml

我用open_in它打开一个本地文件及其路径:

let f = open_in "/Users/SoftTimur/file.txt" in
...
Run Code Online (Sandbox Code Playgroud)

现在,我想打开一个带有URL的可下载文件:

let f = open_in "http://caml.inria.fr/distrib/ocaml-4.02/ocaml-4.02-refman.txt" in
...
Run Code Online (Sandbox Code Playgroud)

返回错误Fatal error: exception Sys_error("http://caml.inria.fr/distrib/ocaml-4.02/ocaml-4.02-refman.txt: No such file or directory").

有谁知道我可以用哪个功能打开这样一个可下载的文件?我是否必须先将其下载到本地(OCaml如何做到这一点?)?

ivg*_*ivg 5

嗯,OCaml中有很多库可以处理http协议,特别是网络通信.它们都不会提供类型的函数,string -> in_channel因为in_channel类型是OCaml拥有的抽象.该语言不允许我们创建自己的通道类型1的实现.

我知道和使用的库是:

  1. cohttp - http客户端和服务器的异步库;
  2. ocurl - 与libcurl的绑定;
  3. ocamlnet - 万物网络,甚至更多;

据推测还有其他人,请随时编辑此答案并添加它们.

我个人更喜欢异步monadic cohttp,但它更容易开始ocamlnet,这也是一个很好的库,具有很多功能.这是如何在OCaml顶级中使用它:

# #use "topfind"
# #require "netclient";
# module Client = Nethttp_client.Convenience
# let ocamldoc = Client.http_get "http://caml.inria.fr/distrib/ocaml-4.02/ocaml-4.02-refman.txt";;
Run Code Online (Sandbox Code Playgroud)

在开始播放之前,请确保已安装它

opam install ocamlnet
Run Code Online (Sandbox Code Playgroud)

脚注:

  1. 至少在纯OCaml中,可以用C创建它,但我怀疑是否有人会朝这个方向努力,它不值得.

  • 那么你唯一的选择就是`cohttp + lwt` (2认同)