ocurl从多请求句柄中的单个curl请求提取输出
我试图在一个脚本中同时启动多个HTTP请求。我正在使用ocurl库(它是libcurl的一个薄包装器),并试图从curl多句柄中读取信息 下面的示例使用了一个简单的curl句柄,效果非常好,可以将响应转储到stdoutocurl从多请求句柄中的单个curl请求提取输出,curl,ocaml,Curl,Ocaml,我试图在一个脚本中同时启动多个HTTP请求。我正在使用ocurl库(它是libcurl的一个薄包装器),并试图从curl多句柄中读取信息 下面的示例使用了一个简单的curl句柄,效果非常好,可以将响应转储到stdout module C = Curl ;; let get_handle () = let () = C.global_init C.CURLINIT_GLOBALALL in let handle = new C.handle in let () = beg
module C = Curl ;;
let get_handle () =
let () = C.global_init C.CURLINIT_GLOBALALL in
let handle = new C.handle in
let () = begin
handle#set_url "google.com";
handle#set_followlocation true;
end in
handle ;;
let main () =
let obj = get_handle () in
obj#perform ;;
main () ;;
为了更好地理解API,我尝试使用一个只包含一个请求的简单多执行句柄来做同样的事情。我正在尝试使用set\u writefunction
方法(这是一个简单的包装器)将单个请求的输出写入包含字符串引用的模块范围变量。我使用的闭包将字符串分配给message
,然后返回写入的字节数。我希望看到我在消息中获取的整个文档、它的尾随片段(如果curl使用内容块多次在内部调用我的回调),或者一个空字符串(如果curl使用空字符串标记内容的结尾,我的回调应该处理这种情况)。而是打印通用初始值
,这表明从未调用回调。为什么没有调用我的回调
module C = Curl ;;
module M = Curl.Multi ;;
let message = ref "generic initial value" ;;
let get_handle () =
let () = C.global_init C.CURLINIT_GLOBALALL in
let handle = new C.handle in
let () = begin
handle#set_url "google.com";
handle#set_followlocation true;
handle#set_writefunction (fun str -> (message := str; String.length (!message)));
end in
handle ;;
let batch () =
let newhandle = get_handle () in
let multi = M.create () in
let () = M.add multi newhandle#handle in
let _ = M.perform multi in
Printf.printf "%s\n" (!message) ;;
let main () = batch () ;;
main () ;;