2017-06-10 17 views
6

Tôi không hiểu đầy đủ cách SWI Prolog xử lý http. Tôi có đoạn mã sau hầu hết hoạt động ngoài get_header/1. Tôi cần để có thể đọc tập tin tiêu đề của yêu cầu http để có được một giá trị. Làm thế nào để làm điều đó? Tôi có sử dụng http_read_header/2 không? Nếu thế thì sao?SWI-Prolog đọc tiêu đề http

:- 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). 

Trả lời

4

Thứ nhất, khi đăng một câu hỏi về các thư viện HTTP, xin vui lòng bao gồm mã đầy đủ  .

Điều này có nghĩa là máy chủ ứng dụng khách mà bạn sử dụng để đăng yêu cầu.

Chỉ từ câu hỏi của bạn, không ai biết bạn đang làm gì. Đây là câu hỏi điển hình cho các câu hỏi về thư viện HTTP   và tôi hy vọng sẽ ít phổ biến hơn trong tương lai.

Thứ hai, Requestđã là danh sách các yếu tố Name(Value).

Bất kỳ trường tiêu đề nào được khách hàng gửi là bao gồm trong danh sách này. Chỉ đơn giản là tìm kiếm giá trị trong danh sách   này, sử dụng các biến vị ngữ điển hình là lý do trên các danh sách, chẳng hạn như member/2option/3.

Ví dụ, nếu khách hàng đã nộp header The-Field: x, sau đó

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

sẽ mang lại Value = x.

+2

Cảm ơn bạn đã giải thích những gì tôi đã nhầm lẫn. Tôi đã cố gắng để cắt bỏ mã mà tôi nghĩ rằng sẽ nhận được trong cách của những gì tôi đã yêu cầu. – user27815

+2

Tôi hiểu điều đó. Nhưng nó là quá nhiều để mong đợi rằng những người muốn trả lời câu hỏi cũng đưa ra mã phù hợp với khách hàng phù hợp với trường hợp sử dụng cụ thể của bạn. Vui lòng bao gồm một khách hàng làm rõ những gì bạn đang làm trong những trường hợp như vậy. Để cắt mã, bạn có thể sử dụng lời gọi mẫu 'wget' hoặc' curl' để tạo ra yêu cầu khách hàng phù hợp. Có một số câu hỏi như vậy đã có thể được trả lời dễ dàng nếu trường hợp sử dụng được mô tả đầy đủ hơn. – mat

+2

Mã khách hàng không thuộc quyền kiểm soát của tôi trong trường hợp này nên tôi không thể cung cấp cho bạn. Hệ thống được kết nối với một dịch vụ khác, và tôi đang cố gắng tìm ra những gì nó đang gửi, đó chính là vấn đề! – user27815