SWI-Prolog读取HTTP头

6

我不完全理解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).
1个回答

4

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

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

从您的问题中,没有人知道您在做什么。这对于有关HTTP库的问题是典型的,我希望这种情况在未来会变得不那么常见。

其次,Request已经是一个名称(值)元素列表。

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

例如,如果客户端提交了标题为The-Field: x的标题,则

member(the_field(Value), Request),
...

将产生Value = x


2
谢谢您解释了我困惑的问题。我试图剪切代码,因为我认为它会妨碍我的问题。 - user27815
2
我理解这一点。但是期望那些想要回答问题的人,还能提供适配你具体使用情况的客户端代码,这或许有些过分了。请包含一个客户端,清晰地说明你在这种情况下正在做什么。为了减少代码量,可以使用 wgetcurl 的示例调用来生成一个合适的客户端请求。已经有几个这样的问题,如果使用情况被完整描述,就可以轻松回答。 - mat
2
在这种情况下,客户端代码不在我的控制范围内,因此我无法将其提供给您。系统由另一个服务连接,我正在尝试弄清楚它发送了什么,这就是问题所在! - user27815

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接