如何从swi prolog http请求获取特定的cookie值

时间:2014-01-08 18:31:01

标签: http cookies get prolog swi-prolog

SWI prolog http服务器库提供了一种优雅访问传入的http get查询参数/术语的方法:

http_parameters(Request, [term(QueryTerm, [])]),

是否存在允许检索特定cookie名称/值的等效方法。

例如。我希望存在的虚构谓词:

http_parameters(Request, [cookie('my_cookieName', MyCookieValue), [])]),

http_parameters似乎只访问'search(X)'值(即仅限表单数据)。

由于请求对象只是一个列表,我可以这样做:

nth1(_, Request, cookie(CookieL)),

然后解析出CookieL中的名称/值对...如果有一个谓词已经直接存在,那就太难了。

1 个答案:

答案 0 :(得分:0)

看了http_parameters源代码后,我可以看到prolog将为cookie列表的名称/值对解析完成所有繁重工作。

所以设置了一个http处理程序:

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

并定义将自动了解swi http Request对象的谓词(因为它已被定义为处理程序):

myroothandler(Request) :-
  http_cookie_value(Request, 'mycookiename', Value).

然后新的cookie提取器本身:

% extracts a cookie value from the swi http request object
% fails if either no cookie list in request or cookie Name not found
http_cookie_value(Request, Name, Value) :-

    % cookie list must exist in the request, and will live in CookieList
    memberchk(cookie(CookieList), Request),

    % find one cookie in the cookie list whose Name is Value.
    nth1(_, CookieList, Name=Value).