SWI-Prolog读取http标头

use*_*815 6 http prolog swi-prolog

我不完全理解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).
Run Code Online (Sandbox Code Playgroud)

mat*_*mat 4

首先,当发布有关 HTTP 库的问题时,请包含完整的代码

这意味着您用来发布请求的服务器和客户端。

仅从你的问题来看,没有人知道你在做什么。这是有关 HTTP 库的典型问题,我希望将来不再那么常见。

其次,已经Request是一个元素列表。Name(Value)

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

例如,如果客户端已经提交了 header The-Field: x,那么

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

将会产生Value = x.

  • 谢谢你解释了我的困惑。我试图删除我认为会妨碍我所要求的内容的代码。 (2认同)
  • 我明白那个。但是,期望想要回答问题的人也能提出适合您的具体用例的匹配客户端代码就太过分了。请包括一位客户,明确说明您在这种情况下正在做什么。要减少代码,您可以使用“wget”或“curl”示例调用来生成合适的客户端请求。如果更全面地描述用例,已经有几个这样的问题可以很容易地回答。 (2认同)
  • 在这种情况下,客户端代码不受我的控制,因此我无法将其提供给您。系统通过另一个服务连接到,我试图弄清楚它正在发送什么,这就是问题所在! (2认同)