SWI-Prolog http_post和http_delete莫名其妙地挂起

时间:2012-06-19 21:53:42

标签: http prolog swi-prolog

当我尝试使用SWI-Prolog的http_post/4时,如下所示:

:- use_module(library(http/http_client).

update(URL, Arg) :-
    http_post(URL, form([update = Arg), _, [status_code(204)]).

当我查询此规则并观察TCP流量时,我看到HTTP POST请求并且回复时预期的204状态代码都会立即发生。但是,Prolog会在返回“true”之前挂起长达30秒。发生了什么阻止规则立即返回?

我也试过这个变种,但它也挂了:

:- use_module(library(http/http_client).

update(URL, Arg) :-
    http_post(URL, form([update = Arg), Reply, [status_code(204)]),
    close(Reply).

http_delete/3我遇到了类似的问题,但 http_get/3

1 个答案:

答案 0 :(得分:2)

library docs声明http_post

  

除了提供使用http_post_data / 3发布的输入文档之外,它等同于http_get / 3。

http_get在其选项中有超时(+超时)。这可能有助于降低延迟,但由于默认设置为+无限,我担心无法解决问题。好像你正在调用的服务使连接保持活动状态达到一些超时。

在https上调用Google API服务时,我个人不得不使用http_open而不是http_post ...