File tree Expand file tree Collapse file tree 6 files changed +35
-1
lines changed
Expand file tree Collapse file tree 6 files changed +35
-1
lines changed Original file line number Diff line number Diff line change 22
33## 2024
44
5+ * February 13 - Option to set a user agent for all request - [ #5 ] ( https://github.com/joemasilotti/HTTP-Client/pull/5 )
56* February 13 - Expose status code when possible - [ #4 ] ( https://github.com/joemasilotti/HTTP-Client/pull/4 )
67
78## 2022
Original file line number Diff line number Diff line change @@ -108,6 +108,16 @@ let request = URLRequest(
108108_ = await client.request (request)
109109```
110110
111+ ### User agent
112+
113+ A user agent can also be set for all requests, assigning the ` "User-Agent" ` header.
114+
115+ ``` swift
116+ import HTTP
117+
118+ HTTP.Global .userAgent = " Custom User Agent"
119+ ```
120+
111121### Key encoding strategies
112122
113123By default, all encoding and decoding of keys to JSON is done by converting to snake case.
Original file line number Diff line number Diff line change @@ -3,11 +3,13 @@ import Foundation
33public enum Global {
44 public static var keyDecodingStrategy : JSONDecoder . KeyDecodingStrategy = . convertFromSnakeCase
55 public static var keyEncodingStrategy : JSONEncoder . KeyEncodingStrategy = . convertToSnakeCase
6+ public static var userAgent : String ?
67 public static var requestLoader : RequestLoader = URLSession . shared
78
89 static func resetToDefaults( ) {
910 keyDecodingStrategy = . convertFromSnakeCase
1011 keyEncodingStrategy = . convertToSnakeCase
12+ userAgent = nil
1113 requestLoader = URLSession . shared
1214 }
1315}
Original file line number Diff line number Diff line change @@ -6,7 +6,12 @@ public class Request {
66 public init ( url: URL , method: Method = . get, headers: Headers = [ : ] ) {
77 self . url = url
88 self . method = method
9- self . headers = headers
9+
10+ if let userAgent = Global . userAgent {
11+ self . headers = headers. merging ( [ " User-Agent " : userAgent] ) { _, new in new }
12+ } else {
13+ self . headers = headers
14+ }
1015 }
1116
1217 // MARK: Internal
Original file line number Diff line number Diff line change @@ -52,6 +52,14 @@ class BodyRequestTests: XCTestCase {
5252 XCTAssertEqual ( json [ " secondProperty " ] , " value " )
5353 }
5454
55+ func test_init_setsGlobalUserAgent( ) throws {
56+ Global . userAgent = " Custom User Agent "
57+ let request = BodyRequest ( url: URL . test, body: TestObject ( ) )
58+
59+ let urlRequest = request. asURLRequest
60+ XCTAssertEqual ( urlRequest. value ( forHTTPHeaderField: " User-Agent " ) , " Custom User Agent " )
61+ }
62+
5563 private func decodeRequest( _ request: Request ) throws -> [ String : String ] {
5664 let urlRequest = request. asURLRequest
5765 let data = try XCTUnwrap ( urlRequest. httpBody)
Original file line number Diff line number Diff line change @@ -28,4 +28,12 @@ class RequestTests: XCTestCase {
2828 let requestWithHeaders = Request ( url: URL . test, headers: headers)
2929 XCTAssertEqual ( requestWithHeaders. asURLRequest. allHTTPHeaderFields, headers)
3030 }
31+
32+ func test_init_setsGlobalUserAgent( ) throws {
33+ Global . userAgent = " Custom User Agent "
34+ let request = Request ( url: URL . test)
35+
36+ let urlRequest = request. asURLRequest
37+ XCTAssertEqual ( urlRequest. value ( forHTTPHeaderField: " User-Agent " ) , " Custom User Agent " )
38+ }
3139}
You can’t perform that action at this time.
0 commit comments