打开可下载文件
Open a downloadable file
我使用 open_in
打开本地文件,其路径为:
let f = open_in "/Users/SoftTimur/file.txt" in
...
现在,我想打开一个可下载文件 URL:
let f = open_in "http://caml.inria.fr/distrib/ocaml-4.02/ocaml-4.02-refman.txt" in
...
returns 一个错误 Fatal error: exception Sys_error("http://caml.inria.fr/distrib/ocaml-4.02/ocaml-4.02-refman.txt: No such file or directory")
。
有谁知道我可以使用哪个函数来打开这样一个可下载的文件?我是否必须先将其下载到本地(OCaml 如何做到这一点?)?
在 Ocaml 中,这是一个 C fopen 调用,无法使用 http 源方案来实现。
您必须先下载文件,使用 linux 包管理器中使用的常用下载工具之一 wget 或 curl。 Sys.command
是你做这件事的朋友。
编写一个模块来检查文件名中是否有 "schema:" 之类的前缀,并采取适当的措施并不难。
也许看看 opam 来源以获得灵感?
好吧,OCaml 中有很多库可以处理特定的 http
协议和一般的网络通信。其中 None 将提供 string -> in_channel
类型的函数,因为 in_channel
类型是 OCaml 拥有的抽象。该语言不允许我们创建我们自己的通道类型 1 的实现。
我知道和使用的库是:
想必还有其他的,请随时编辑此答案并添加。
我个人更喜欢异步 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";;
开始播放之前,请确保您安装了
opam install ocamlnet
脚注:
- 至少在纯OCaml中,可以从C创建它,但我怀疑是否有人会朝这个方向追求,不值得。
Does anyone know which function I could use to open such a downloadable file?
为您的 Linux 发行版安装 wget
程序并在编译时使用 Unix
库,您可以使用:
let open_url_in = Unix.open_process_in("wget -O - " ^ url)
这会运行 wget
程序,-O o
要求它将下载的文件输出到标准输出,open_process_in
作为结果通道读入您的进程。
Do I have to first download it to local (how to do that by OCaml?)?
没有
我使用 open_in
打开本地文件,其路径为:
let f = open_in "/Users/SoftTimur/file.txt" in
...
现在,我想打开一个可下载文件 URL:
let f = open_in "http://caml.inria.fr/distrib/ocaml-4.02/ocaml-4.02-refman.txt" in
...
returns 一个错误 Fatal error: exception Sys_error("http://caml.inria.fr/distrib/ocaml-4.02/ocaml-4.02-refman.txt: No such file or directory")
。
有谁知道我可以使用哪个函数来打开这样一个可下载的文件?我是否必须先将其下载到本地(OCaml 如何做到这一点?)?
在 Ocaml 中,这是一个 C fopen 调用,无法使用 http 源方案来实现。
您必须先下载文件,使用 linux 包管理器中使用的常用下载工具之一 wget 或 curl。 Sys.command
是你做这件事的朋友。
编写一个模块来检查文件名中是否有 "schema:" 之类的前缀,并采取适当的措施并不难。
也许看看 opam 来源以获得灵感?
好吧,OCaml 中有很多库可以处理特定的 http
协议和一般的网络通信。其中 None 将提供 string -> in_channel
类型的函数,因为 in_channel
类型是 OCaml 拥有的抽象。该语言不允许我们创建我们自己的通道类型 1 的实现。
我知道和使用的库是:
想必还有其他的,请随时编辑此答案并添加。
我个人更喜欢异步 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";;
开始播放之前,请确保您安装了
opam install ocamlnet
脚注:
- 至少在纯OCaml中,可以从C创建它,但我怀疑是否有人会朝这个方向追求,不值得。
Does anyone know which function I could use to open such a downloadable file?
为您的 Linux 发行版安装 wget
程序并在编译时使用 Unix
库,您可以使用:
let open_url_in = Unix.open_process_in("wget -O - " ^ url)
这会运行 wget
程序,-O o
要求它将下载的文件输出到标准输出,open_process_in
作为结果通道读入您的进程。
Do I have to first download it to local (how to do that by OCaml?)?
没有