gpt4 book ai didi

json - Prolog接收Json post

转载 作者:可可西里 更新时间:2023-11-01 16:22:57 24 4
gpt4 key购买 nike

这是我在 stackoverflow 中的第一个问题,请耐心等待。

我正在尝试构建一个简单的 Prolog api,它接收 json posts 并在处理它们之后,发回另一个 json post。我发现这段代码可以接收 json:

handle(Request) :-
http_read_json_dict(Request, DictIn),
compute(DictIn, DictOut),
reply_json(DictOut).

我假设 compute 是一个自定义谓词,出于测试目的,它是 test(D,D)

问题是,当我尝试在 swi-prolog 中测试 handle(Request) 时,我收到错误消息 ERROR: atom_codes/2: Arguments are not enoughly instantiated 或者我弄错了。

我假设我只需要在 Request 中传递一个 json,但它不起作用。我还尝试使用 Postman 发送一个正文中包含 json 文件的帖子(原始和应用程序/json),但我超时了,嗯..是的...我的问题是我应该在 Request 中写什么才能正确实例化它?

提前致谢,如果这是一个糟糕/新手的问题,我深表歉意,但 swi-prolog 文档很糟糕,我无法在任何地方找到答案。

最佳答案

我不太确定你是否完全理解 Prolog 和 swi-prolog 的网络框架是如何工作的。

这是一个让您入门的分步迷你教程:

  1. 将其复制到名为 myserver.pl 的文件中:

    :- use_module(library(http/thread_httpd)).
    :- use_module(library(http/http_dispatch)).

    :- use_module(library(http/http_json)).

    :- http_handler(root(.),handle,[]).

    server(Port) :-
    http_server(http_dispatch,[port(Port)]).

    handle(Request) :-
    format(user_output,"I'm here~n",[]),
    http_read_json(Request, DictIn,[json_object(term)]),
    format(user_output,"Request is: ~p~n",[Request]),
    format(user_output,"DictIn is: ~p~n",[DictIn]),
    DictOut=DictIn,
    reply_json(DictOut).
  2. 启动 swi-prolog 并在主 repl 类型中:

    [myserver].

    查阅您的文件。你应该没有错误。然后启动你的服务器,比如在端口 8000 上:

    server(8000).

    您应该得到以下回复:

    % Started server at http://localhost:8000/
  3. 打开另一个终端并使用 curl 发布一些 json:

    curl -H "Content-Type: application/json" -X POST -d '{"hello":"world"}' http://localhost:8000

    您应该得到以下回复:

    {"hello":"world"}

    在运行序言中你应该看到这些消息:

    I'm here
    Request is: [protocol(http),peer(ip(127,0,0,1)),pool(client('httpd@8000',user:http_dispatch,<stream>(0x7facc4026b20),<stream>(0x7facc4027040))),input(<stream>(0x7facc4026b20)),method(post),request_uri(/),path(/),http_version(1-1),user_agent('curl/7.35.0'),host(localhost),port(8000),accept([media(_G841/_G842,[],1.0,[])]),content_type('application/json'),content_length(17)]
    DictIn is: json([hello=world])

如果您对文件 myserver.pl 进行任何修改,您只需在 prolog 的 repl 中键入 make.

我怎么推荐都不为过Anne Ogborn's excellent tutorial .顺便说一句,swi-prolog 的文档非常好。

关于json - Prolog接收Json post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com