From 083d3dba3866b7fa6408172a648e4dc8e2d959e5 Mon Sep 17 00:00:00 2001 From: kfont Date: Fri, 5 Sep 2025 09:24:59 -0700 Subject: [PATCH 1/2] net.http: Use a full url when using a proxy, instead of only the path (#25228) --- vlib/net/http/http_proxy.v | 4 +++- vlib/net/http/http_proxy_test.v | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/vlib/net/http/http_proxy.v b/vlib/net/http/http_proxy.v index f175d64414..7e420c62f5 100644 --- a/vlib/net/http/http_proxy.v +++ b/vlib/net/http/http_proxy.v @@ -87,7 +87,9 @@ fn (pr &HttpProxy) build_proxy_headers(host string) string { fn (pr &HttpProxy) http_do(host urllib.URL, method Method, path string, req &Request) !Response { host_name, port := net.split_address(host.hostname())! - s := req.build_request_headers(req.method, host_name, port, path) + port_part := if port == 80 || port == 0 { '' } else { ':${port}' } + + s := req.build_request_headers(req.method, host_name, port, '${host.scheme}://${host_name}${port_part}${path}') if host.scheme == 'https' { mut client := pr.ssl_dial('${host.host}:443')! diff --git a/vlib/net/http/http_proxy_test.v b/vlib/net/http/http_proxy_test.v index 01660f16af..af47bf3b82 100644 --- a/vlib/net/http/http_proxy_test.v +++ b/vlib/net/http/http_proxy_test.v @@ -1,6 +1,8 @@ module http import encoding.base64 +import net.urllib +import os const sample_proxy_url = 'https://localhost' const sample_auth_proxy_url = 'http://user:pass@localhost:8888' @@ -46,3 +48,29 @@ fn test_proxy_headers_authenticated() ? { assert headers == 'CONNECT 127.0.0.1:1337 HTTP/1.1\r\n' + 'Host: 127.0.0.1\r\n' + 'Proxy-Connection: Keep-Alive\r\nProxy-Authorization: Basic ${auth_token}\r\n\r\n' } + +fn test_http_proxy_do() { + env := os.environ() + mut env_proxy := '' + + for envvar in ['http_proxy', 'HTTP_PROXY', 'https_proxy', 'HTTPS_PROXY'] { + prox_val := env[envvar] or { continue } + if prox_val != '' { + env_proxy = env[envvar] + } + } + if env_proxy != '' { + println('Has usable proxy env vars') + proxy := new_http_proxy(env_proxy)! + mut header := new_header(key: .user_agent, value: 'vlib') + header.add_custom('X-Vlang-Test', 'proxied')! + res := proxy.http_do(urllib.parse('http://httpbin.org/headers')!, Method.get, + '/headers', &Request{ proxy: proxy, header: header })! + println(res.status_code) + println('he4aders ${res.header}') + assert res.status_code == 200 + // assert res.header.data['X-Vlang-Test'] == 'proxied' + } else { + println('Proxy env vars (HTTP_PROXY or HTTPS_PROXY) not set. Skipping test.') + } +} From 21c46f4ae5132ef01ded0b9eda90d25e08a01bca Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Fri, 5 Sep 2025 19:28:29 +0300 Subject: [PATCH 2/2] time: move the nanosecond comparison before the rest in the Time == Time implementation --- vlib/time/operator.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vlib/time/operator.v b/vlib/time/operator.v index 8242e3444e..66dcdb0bd4 100644 --- a/vlib/time/operator.v +++ b/vlib/time/operator.v @@ -3,8 +3,8 @@ module time // operator `==` returns true if provided time is equal to time @[inline] pub fn (t1 Time) == (t2 Time) bool { - return t1.is_local == t2.is_local && t1.local_unix() == t2.local_unix() - && t1.nanosecond == t2.nanosecond + return t1.nanosecond == t2.nanosecond && t1.is_local == t2.is_local + && t1.local_unix() == t2.local_unix() } // operator `<` returns true if provided time is less than time