Skip to content

Commit 4be0b6f

Browse files
committed
make it more mutable
make it more mutable
1 parent 8775fc1 commit 4be0b6f

File tree

1 file changed

+48
-35
lines changed

1 file changed

+48
-35
lines changed

Sources/AsyncHTTPClient/HTTPHandler.swift

Lines changed: 48 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,13 @@ extension HTTPClient {
6060
}
6161

6262
public struct Request {
63-
public let version: HTTPVersion
64-
public let method: HTTPMethod
65-
public let url: URL
63+
public var version: HTTPVersion
64+
public var method: HTTPMethod
6665
public var headers: HTTPHeaders
6766
public var body: Body?
68-
69-
internal let scheme: String
70-
internal let host: String
67+
private var _url: URL!
68+
private var _schema: String!
69+
private var _host: String!
7170

7271
public init(url: String, version: HTTPVersion = HTTPVersion(major: 1, minor: 1), method: HTTPMethod = .GET, headers: HTTPHeaders = HTTPHeaders(), body: Body? = nil) throws {
7372
guard let url = URL(string: url) else {
@@ -78,6 +77,14 @@ extension HTTPClient {
7877
}
7978

8079
public init(url: URL, version: HTTPVersion = HTTPVersion(major: 1, minor: 1), method: HTTPMethod = .GET, headers: HTTPHeaders = HTTPHeaders(), body: Body? = nil) throws {
80+
self.version = version
81+
self.method = method
82+
self.headers = headers
83+
self.body = body
84+
try self.setUrl(url)
85+
}
86+
87+
public mutating func setUrl(_ url: URL) throws {
8188
guard let scheme = url.scheme?.lowercased() else {
8289
throw HTTPClientError.emptyScheme
8390
}
@@ -90,13 +97,21 @@ extension HTTPClient {
9097
throw HTTPClientError.emptyHost
9198
}
9299

93-
self.version = version
94-
self.method = method
95-
self.url = url
96-
self.scheme = scheme
97-
self.host = host
98-
self.headers = headers
99-
self.body = body
100+
self._url = url
101+
self._schema = scheme
102+
self._host = host
103+
}
104+
105+
public var url: URL {
106+
return self._url
107+
}
108+
109+
public var scheme: String {
110+
return self._schema
111+
}
112+
113+
public var host: String {
114+
return self._host
100115
}
101116

102117
public var useTLS: Bool {
@@ -527,38 +542,36 @@ internal struct RedirectHandler<T> {
527542
}
528543

529544
func redirect(status: HTTPResponseStatus, to redirectURL: URL, promise: EventLoopPromise<T>) {
530-
let originalRequest = self.request
545+
let originalURL = self.request.url
546+
547+
var request = self.request
548+
do {
549+
try request.setUrl(redirectURL)
550+
} catch {
551+
return promise.fail(error)
552+
}
531553

532554
var convertToGet = false
533555
if status == .seeOther, request.method != .HEAD {
534556
convertToGet = true
535557
} else if status == .movedPermanently || status == .found, request.method == .POST {
536558
convertToGet = true
537559
}
538-
539-
var method = originalRequest.method
540-
var headers = originalRequest.headers
541-
var body = originalRequest.body
542-
560+
543561
if convertToGet {
544-
method = .GET
545-
body = nil
546-
headers.remove(name: "Content-Length")
547-
headers.remove(name: "Content-Type")
562+
request.method = .GET
563+
request.body = nil
564+
request.headers.remove(name: "Content-Length")
565+
request.headers.remove(name: "Content-Type")
548566
}
549567

550-
if !originalRequest.url.hasTheSameOrigin(as: redirectURL) {
551-
headers.remove(name: "Origin")
552-
headers.remove(name: "Cookie")
553-
headers.remove(name: "Authorization")
554-
headers.remove(name: "Proxy-Authorization")
555-
}
556-
557-
do {
558-
let request = try HTTPClient.Request(url: redirectURL, version: originalRequest.version, method: method, headers: headers, body: body)
559-
return self.execute(request).futureResult.cascade(to: promise)
560-
} catch {
561-
return promise.fail(error)
568+
if !originalURL.hasTheSameOrigin(as: redirectURL) {
569+
request.headers.remove(name: "Origin")
570+
request.headers.remove(name: "Cookie")
571+
request.headers.remove(name: "Authorization")
572+
request.headers.remove(name: "Proxy-Authorization")
562573
}
574+
575+
return self.execute(request).futureResult.cascade(to: promise)
563576
}
564577
}

0 commit comments

Comments
 (0)