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
This commit is contained in:
Andrew Kelley 2024-04-12 15:09:35 -07:00
parent f1c0f42cdd
commit 419753f45e

View file

@ -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,