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

标签 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

最佳答案

library docs说明 http_post

It is equivalent to http_get/3, except for providing an input document, which is posted using http_post_data/3.

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

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

关于http - SWI-Prolog http_post 和 http_delete 莫名其妙地挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11110036/

相关文章:

prolog - 在 Prolog 中将字符列表转换为字符串

java - Hello hello prolog 和 weka 集成

functional-programming - Prolog 创建字典

prolog - 写入文件 | Swi-Prolog | window

prolog - 如何像在 Prolog 中一样在 Mercury 中生成新变量列表?

http https 重复内容谷歌

http - 哪个HTTP流量监控工具可以替代Fiddler

prolog - prolog 中谓词的不同行为

c# - IsWebSocketRequest 不能在单声道中工作

ios - UILabel/UITextField 不使用异步 HTTP 请求更新