Skip to content

Commit b278e88

Browse files
authored
Merge pull request #56 from GetBlast/55_request_uri
Add port to the Host header if port is set
2 parents c1bbe27 + b86df46 commit b278e88

3 files changed

Lines changed: 30 additions & 2 deletions

File tree

Sources/Prorsum/HTTP/HTTPClient.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ public class HTTPClient {
9696
}
9797

9898
if request.host == nil {
99-
request.host = url.host
99+
if let host = request.host, let port = url.port {
100+
request.host = "\(host):\(port)"
101+
} else {
102+
request.host = url.host
103+
}
100104
}
101105

102106
if request.accept.isEmpty {

Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,23 @@ public struct RequestSerializer {
1919
let newLine: [UInt8] = [13, 10]
2020

2121
let method = "\(request.method)".uppercased()
22-
try stream.write("\(method) \(request.url.absoluteString) HTTP/\(request.version.major).\(request.version.minor)".bytes, deadline: deadline)
22+
23+
// if host is set
24+
// build uri from path & query
25+
// else use absoluteString
26+
//
27+
let requestURI: String
28+
if request.host != nil {
29+
var uri = !request.url.path.isEmpty ? request.url.path : "/"
30+
if let query = request.url.query {
31+
uri += "?\(query)"
32+
}
33+
requestURI = uri
34+
} else {
35+
requestURI = request.url.absoluteString
36+
}
37+
38+
try stream.write("\(method) \(requestURI) HTTP/\(request.version.major).\(request.version.minor)".bytes, deadline: deadline)
2339
try stream.write(newLine, deadline: deadline)
2440

2541
for (name, value) in request.headers.headers {

Tests/ProrsumTests/HTTPClientTests.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,14 @@ class HTTPClientTests: XCTestCase {
5959
XCTAssertEqual(response.statusCode, 200)
6060
}
6161

62+
func testRedirectToOtherDomainWithPort() {
63+
let client = try! HTTPClient(url: URL(string: "https://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%3A80")!)
64+
try! client.open()
65+
let response = try! client.request()
66+
67+
XCTAssertEqual(response.statusCode, 200)
68+
}
69+
6270
func testRedirectMaxRedirectionExceeded() {
6371
HTTPClient.maxRedirection = 1
6472
defer {

0 commit comments

Comments
 (0)