Commit 419753f45e

Andrew Kelley <andrew@ziglang.org>
2024-04-13 00:09:35
std.http.Client: pass port to server based on user input
This makes the host http header have the port if and only if the URI provided by the API user included it. Closes #19624
1 parent f1c0f42
Changed files (1)
lib
std
lib/std/http/Client.zig
@@ -805,7 +805,7 @@ pub const Request = struct {
         }
 
         req.uri = valid_uri;
-        req.connection = try req.client.connect(new_host, valid_uri.port.?, protocol);
+        req.connection = try req.client.connect(new_host, uriPort(valid_uri, protocol), protocol);
         req.redirect_behavior.subtractOne();
         req.response.parser.reset();
 
@@ -1264,7 +1264,7 @@ fn createProxyFromEnvVar(arena: Allocator, env_var_names: []const []const u8) !?
         .protocol = protocol,
         .host = valid_uri.host.?.raw,
         .authorization = authorization,
-        .port = valid_uri.port.?,
+        .port = uriPort(valid_uri, protocol),
         .supports_connect = true,
     };
     return proxy;
@@ -1582,11 +1582,14 @@ fn validateUri(uri: Uri, arena: Allocator) !struct { Connection.Protocol, Uri }
     valid_uri.host = .{
         .raw = try (uri.host orelse return error.UriMissingHost).toRawMaybeAlloc(arena),
     };
-    valid_uri.port = uri.port orelse switch (protocol) {
+    return .{ protocol, valid_uri };
+}
+
+fn uriPort(uri: Uri, protocol: Connection.Protocol) u16 {
+    return uri.port orelse switch (protocol) {
         .plain => 80,
         .tls => 443,
     };
-    return .{ protocol, valid_uri };
 }
 
 /// Open a connection to the host specified by `uri` and prepare to send a HTTP request.
@@ -1634,7 +1637,7 @@ pub fn open(
     }
 
     const conn = options.connection orelse
-        try client.connect(valid_uri.host.?.raw, valid_uri.port.?, protocol);
+        try client.connect(valid_uri.host.?.raw, uriPort(valid_uri, protocol), protocol);
 
     var req: Request = .{
         .uri = valid_uri,