1

当我尝试使用 SWI-Prologhttp_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 在返回“真”之前会挂起最多 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

4

1 回答 1

2

图书馆文档指出 http_post

它相当于 http_get/3,除了提供一个输入文档,它使用 http_post_data/3 发布。

http_get 的选项中有 timeout(+Timeout)。这可能有助于降低延迟,但由于默认设置为 +infinite,我担心不会解决问题。似乎您正在调用的服务使连接保持活动状态直到超时。

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

于 2012-06-20T07:23:06.550 回答