当我尝试使用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
。
答案 0 :(得分:2)
library docs声明http_post
除了提供使用http_post_data / 3发布的输入文档之外,它等同于http_get / 3。
http_get在其选项中有超时(+超时)。这可能有助于降低延迟,但由于默认设置为+无限,我担心无法解决问题。好像你正在调用的服务使连接保持活动状态达到一些超时。
在https上调用Google API服务时,我个人不得不使用http_open而不是http_post ...