【问题标题】:SWI-Prolog read http headerSWI-Prolog 读取 http 标头
【发布时间】:2017-06-10 18:09:16
【问题描述】:

我不完全理解 SWI Prolog 如何处理 http。我有以下代码,除了get_header/1 之外,它主要工作。我需要能够读取 http 请求的头文件以获取值。我怎么做?我使用http_read_header/2 吗?如果有怎么办?

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

myhandle(Request):-
  get_header(H),
  http_read_json_dict(Request,DictIn),
  handle_dict(DictIn,DictOut),
  reply_json(DictOut).

get_header(H):-
  http_read_header(current_input, H),
  something(H).

【问题讨论】:

    标签: http prolog swi-prolog


    【解决方案1】:

    首先,在发布有关 HTTP 库的问题时,请附上完整代码

    这表示您用来发布请求的服务器客户端。

    仅从您的问题来看,没有人知道您在做什么。这对于有关 HTTP 库的问题来说很常见,我希望将来会变得不那么常见。

    其次,Request 已经Name(Value) 元素的列表。

    客户端发送的任何标头字段都包含在此列表中。只需在此列表中查找值,使用推理列表的典型谓词,例如 member/2option/3

    比如客户端已经提交了headerThe-Field: x,那么

    成员(the_field(值),请求), ...

    将产生Value = x

    【讨论】:

    • 谢谢你解释了我的困惑。我试图删减我认为会妨碍我所问问题的代码。
    • 我明白这一点。但是,期望想要回答这个问题的人也想出适合您的具体用例的匹配客户端代码是太过分了。请包括一位客户,说明您在这种情况下正在做什么。要减少代码,您可以使用wgetcurl 示例调用来生成合适的客户端请求。如果更全面地描述用例,已经有几个这样的问题可以很容易地回答。
    • 在这种情况下,客户端代码不受我控制,因此我无法将其提供给您。系统通过另一个服务连接,我试图弄清楚它正在发送什么,这就是问题所在!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    相关资源
    最近更新 更多