Some minor fixes. Thanks to @triska for them!
This commit is contained in:
committed by
Mark Thom
parent
140149f051
commit
f2940ddfcf
@@ -539,7 +539,7 @@ The modules that ship with Scryer Prolog are also called
|
|||||||
Probabilistic predicates and random number generators.
|
Probabilistic predicates and random number generators.
|
||||||
* [`http/http_open`](src/lib/http/http_open.pl) Open a stream to
|
* [`http/http_open`](src/lib/http/http_open.pl) Open a stream to
|
||||||
read answers from web servers. HTTPS is also supported.
|
read answers from web servers. HTTPS is also supported.
|
||||||
* [`http/http_server`](src/lib/http/http_server.pl) Runs a HTTP/1.0 web server.
|
* [`http/http_server`](src/lib/http/http_server.pl) Runs a HTTP/1.1 and HTTP/2.0 web server. Uses [Hyper](https://hyper.rs) as a backend. Supports some query and form handling.
|
||||||
* [`sgml`](src/lib/sgml.pl)
|
* [`sgml`](src/lib/sgml.pl)
|
||||||
`load_html/3` and `load_xml/3` represent HTML and XML documents
|
`load_html/3` and `load_xml/3` represent HTML and XML documents
|
||||||
as Prolog terms for convenient and efficient reasoning. Use
|
as Prolog terms for convenient and efficient reasoning. Use
|
||||||
|
|||||||
@@ -79,8 +79,7 @@ module_qualification(M, H0, H) :-
|
|||||||
H =.. [Method, Path, M:Goal].
|
H =.. [Method, Path, M:Goal].
|
||||||
|
|
||||||
http_listen_(Port, Handlers) :-
|
http_listen_(Port, Handlers) :-
|
||||||
number_chars(Port, CPort),
|
phrase(format_("0.0.0.0:~d", [Port]), Addr),
|
||||||
append("0.0.0.0:", CPort, Addr),
|
|
||||||
'$http_listen'(Addr, HttpListener),!,
|
'$http_listen'(Addr, HttpListener),!,
|
||||||
format("Listening at ~s\n", [Addr]),
|
format("Listening at ~s\n", [Addr]),
|
||||||
http_loop(HttpListener, Handlers).
|
http_loop(HttpListener, Handlers).
|
||||||
@@ -99,10 +98,14 @@ http_loop(HttpListener, Handlers) :-
|
|||||||
HttpResponse = http_response(_, _, _),
|
HttpResponse = http_response(_, _, _),
|
||||||
(call(Handler, HttpRequest, HttpResponse) ->
|
(call(Handler, HttpRequest, HttpResponse) ->
|
||||||
send_response(ResponseHandle, HttpResponse)
|
send_response(ResponseHandle, HttpResponse)
|
||||||
; '$http_answer'(ResponseHandle, 500, [], "Internal Server Error")
|
; (
|
||||||
|
'$http_answer'(ResponseHandle, 500, [], ResponseStream),
|
||||||
|
call_cleanup(format(ResponseStream, "Internal Server Error", []), close(ResponseStream)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
; '$http_answer'(ResponseHandle, 404, [], "Not Found")
|
; (
|
||||||
|
'$http_answer'(ResponseHandle, 404, [], ResponseStream),
|
||||||
|
call_cleanup(format(ResponseStream, "Not Found"), close(ResponseStream)))
|
||||||
),
|
),
|
||||||
http_loop(HttpListener, Handlers).
|
http_loop(HttpListener, Handlers).
|
||||||
|
|
||||||
@@ -110,20 +113,25 @@ send_response(ResponseHandle, http_response(StatusCode0, text(ResponseText), Res
|
|||||||
default(StatusCode0, 200, StatusCode),
|
default(StatusCode0, 200, StatusCode),
|
||||||
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
|
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
|
||||||
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
|
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
|
||||||
|
call_cleanup(
|
||||||
format(ResponseStream, "~s", [ResponseText]),
|
format(ResponseStream, "~s", [ResponseText]),
|
||||||
close(ResponseStream).
|
close(ResponseStream)
|
||||||
|
).
|
||||||
|
|
||||||
send_response(ResponseHandle, http_response(StatusCode0, bytes(ResponseBytes), ResponseHeaders0)) :-
|
send_response(ResponseHandle, http_response(StatusCode0, bytes(ResponseBytes), ResponseHeaders0)) :-
|
||||||
default(StatusCode0, 200, StatusCode),
|
default(StatusCode0, 200, StatusCode),
|
||||||
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
|
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
|
||||||
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
|
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
|
||||||
|
call_cleanup(
|
||||||
format(ResponseStream, "~s", [ResponseBytes]),
|
format(ResponseStream, "~s", [ResponseBytes]),
|
||||||
close(ResponseStream).
|
close(ResponseStream)
|
||||||
|
).
|
||||||
|
|
||||||
send_response(ResponseHandle, http_response(StatusCode0, file(Filename), ResponseHeaders0)) :-
|
send_response(ResponseHandle, http_response(StatusCode0, file(Filename), ResponseHeaders0)) :-
|
||||||
default(StatusCode0, 200, StatusCode),
|
default(StatusCode0, 200, StatusCode),
|
||||||
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
|
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
|
||||||
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
|
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
|
||||||
|
call_cleanup(
|
||||||
setup_call_cleanup(
|
setup_call_cleanup(
|
||||||
open(Filename, read, FileStream, [type(binary)]),
|
open(Filename, read, FileStream, [type(binary)]),
|
||||||
(
|
(
|
||||||
@@ -132,7 +140,8 @@ send_response(ResponseHandle, http_response(StatusCode0, file(Filename), Respons
|
|||||||
),
|
),
|
||||||
close(FileStream)
|
close(FileStream)
|
||||||
),
|
),
|
||||||
close(ResponseStream).
|
close(ResponseStream)
|
||||||
|
).
|
||||||
|
|
||||||
|
|
||||||
default(Var, Default, Out) :-
|
default(Var, Default, Out) :-
|
||||||
|
|||||||
Reference in New Issue
Block a user