From 419753f45ea4de7b6de090f7ad574f5ccaad5669 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 12 Apr 2024 15:09:35 -0700 Subject: [PATCH] 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 --- lib/std/http/Client.zig | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/std/http/Client.zig b/lib/std/http/Client.zig index 20d9956cef..837bdc63c7 100644 --- a/lib/std/http/Client.zig +++ b/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,