diff --git a/vlib/net/http/backend_nix.c.v b/vlib/net/http/backend_nix.c.v index 9c2125de5c..e2b86466b3 100644 --- a/vlib/net/http/backend_nix.c.v +++ b/vlib/net/http/backend_nix.c.v @@ -37,6 +37,9 @@ fn (req &Request) ssl_do(port int, method Method, host_name string, path string) res = C.SSL_get_verify_result(voidptr(ssl)) // ///// req_headers := req.build_request_headers(method, host_name, path) + $if trace_http_request ? { + eprintln('> $req_headers') + } // println(req_headers) C.BIO_puts(web, req_headers.str) mut content := strings.new_builder(100) @@ -63,5 +66,9 @@ fn (req &Request) ssl_do(port int, method Method, host_name string, path string) if ctx != 0 { C.SSL_CTX_free(ctx) } - return parse_response(content.str()) + response_text := content.str() + $if trace_http_response ? { + eprintln('< $response_text') + } + return parse_response(response_text) } diff --git a/vlib/net/http/backend_windows.c.v b/vlib/net/http/backend_windows.c.v index b494b825bb..8c06478f1e 100644 --- a/vlib/net/http/backend_windows.c.v +++ b/vlib/net/http/backend_windows.c.v @@ -6,15 +6,23 @@ module http #flag windows -I @VROOT/thirdparty/vschannel #flag -l ws2_32 -l crypt32 -l secur32 -l user32 #include "vschannel.c" + fn C.new_tls_context() C.TlsContext fn (req &Request) ssl_do(port int, method Method, host_name string, path string) ?Response { mut ctx := C.new_tls_context() C.vschannel_init(&ctx) - mut buff := unsafe {malloc(C.vsc_init_resp_buff_size)} + mut buff := unsafe { malloc(C.vsc_init_resp_buff_size) } addr := host_name sdata := req.build_request_headers(method, host_name, path) + $if trace_http_request ? { + eprintln('> $sdata') + } length := int(C.request(&ctx, port, addr.to_wide(), sdata.str, &buff)) C.vschannel_cleanup(&ctx) - return parse_response(unsafe {buff.vstring_with_len(length)}) + response_text := unsafe { buff.vstring_with_len(length) } + $if trace_http_response ? { + eprintln('< $response_text') + } + return parse_response(response_text) } diff --git a/vlib/net/http/http.v b/vlib/net/http/http.v index 5d4eab225b..236a5b46be 100644 --- a/vlib/net/http/http.v +++ b/vlib/net/http/http.v @@ -74,9 +74,9 @@ pub fn get(url string) ?Response { // post sends a POST HTTP request to the URL with a string data pub fn post(url string, data string) ?Response { - return fetch_with_method(.post, url, + return fetch_with_method(.post, url, data: data - headers: { + headers: map{ 'Content-Type': http.content_type_default } ) @@ -84,9 +84,9 @@ pub fn post(url string, data string) ?Response { // post_json sends a POST HTTP request to the URL with a JSON data pub fn post_json(url string, data string) ?Response { - return fetch_with_method(.post, url, + return fetch_with_method(.post, url, data: data - headers: { + headers: map{ 'Content-Type': 'application/json' } ) @@ -94,8 +94,8 @@ pub fn post_json(url string, data string) ?Response { // post_form sends a POST HTTP request to the URL with X-WWW-FORM-URLENCODED data pub fn post_form(url string, data map[string]string) ?Response { - return fetch_with_method(.post, url, - headers: { + return fetch_with_method(.post, url, + headers: map{ 'Content-Type': 'application/x-www-form-urlencoded' } data: url_encode_form_data(data) @@ -104,9 +104,9 @@ pub fn post_form(url string, data map[string]string) ?Response { // put sends a PUT HTTP request to the URL with a string data pub fn put(url string, data string) ?Response { - return fetch_with_method(.put, url, + return fetch_with_method(.put, url, data: data - headers: { + headers: map{ 'Content-Type': http.content_type_default } ) @@ -114,9 +114,9 @@ pub fn put(url string, data string) ?Response { // patch sends a PATCH HTTP request to the URL with a string data pub fn patch(url string, data string) ?Response { - return fetch_with_method(.patch, url, + return fetch_with_method(.patch, url, data: data - headers: { + headers: map{ 'Content-Type': http.content_type_default } ) @@ -401,9 +401,16 @@ fn (req &Request) http_do(host string, method Method, path string) ?Response { mut client := net.dial_tcp(host) ? // TODO this really needs to be exposed somehow client.write(s.bytes()) ? + $if trace_http_request ? { + eprintln('> $s') + } mut bytes := io.read_all(reader: client) ? client.close() ? - return parse_response(bytes.bytestr()) + response_text := bytes.bytestr() + $if trace_http_response ? { + eprintln('< $response_text') + } + return parse_response(response_text) } // referer returns 'Referer' header value of the given request