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中的名称/值对...如果有一个谓词已经直接存在,那就太难了。
答案 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).