2017-06-10 10 views
6

Nie do końca rozumiem, w jaki sposób SWI Prolog obsługuje http. Mam następujący kod, który głównie działa niezależnie od get_header/1. Muszę być w stanie odczytać plik nagłówkowy żądania http, aby uzyskać wartość. Jak mogę to zrobić? Czy używam http_read_header/2? Jeśli tak to jak?SWI-Prolog odczytuje nagłówek 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). 

Odpowiedz

4

Po pierwsze, podczas księgowania pytanie o bibliotekach HTTP, należy podać kodpełny  .

Oznacza to klienta serwera i używanego do publikowania żądania.

Z twojego pytania nikt nie ma pojęcia, co robisz. Jest to typowe dla pytań dotyczących bibliotek HTTP   i mam nadzieję, że stanie się mniej powszechne w przyszłości.

Po drugie, Request jest już zbiorem elementów Name(Value).

Każde pole nagłówka, które zostało wysłane przez klienta, to , które zawiera na tej liście. Jest to po prostu kwestia sprawdzenia wartości na tej liście  , przy użyciu typowych predykatów, które powodują na listach, takich jak member/2 i option/3.

Na przykład, jeśli klient złożył nagłówek The-Field: x, potem

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

przyniesie Value = x.

+2

Dziękuję, że wyjaśniłem, o co mi chodziło. Próbowałem wyciąć kod, który według mnie byłby przeszkodą w tym, o co prosiłem. – user27815

+2

Rozumiem to. Ale zbyt wiele można się spodziewać, że ludzie, którzy chcą odpowiedzieć na to pytanie, wymyślają również pasujący kod klienta, który pasuje do konkretnego przypadku użycia. Dołącz klienta, który jasno wyjaśni, co robisz w takich przypadkach. Aby wyciąć kod, możesz użyć wywołania próbki 'wget' lub' curl', aby utworzyć dopasowane żądanie klienta. Istnieje już kilka takich pytań, na które można było odpowiedzieć w łatwy sposób, gdyby opis przypadku został dokładniej opisany. – mat

+2

Kod klienta nie jest pod moją kontrolą w tym przypadku, więc nie mogłem ci go dać. System łączy się z inną usługą i próbuję ustalić, co wysyła, więc to był problem! – user27815

Powiązane problemy