【问题标题】:How to get original requests in Alamofire 5?如何在 Alamofire 5 中获取原始请求?
【发布时间】:2020-03-20 12:08:12
【问题描述】:

我为 Alamofire 做了一个包装器,它首先发出数据请求,然后打印原始 URLRequest 的详细信息。

let dataRequest = session.request(url, method: .get, parameters: parameters)
let originalRequest = dataRequest.request
// Now print somehow the details of original request.

它在 Alamofire 4.9 上运行良好,但在最新的 5.0 版本中停止了。问题是dataRequest.request 为零。为什么这种行为发生了变化?如何访问DataRequest下方的URLRequest

【问题讨论】:

    标签: swift alamofire


    【解决方案1】:

    URLRequests 现在在 Alamofire 5 中异步创建,因此您将无法立即访问该值。根据您对URLRequest 所做的事情,可能还有其他解决方案。对于日志记录,我们建议使用新的EventMonitor 协议。您可以阅读our documentation 了解更多信息,但添加一个简单的记录器很简单:

    final class Logger: EventMonitor {
        let queue = DispatchQueue(label: ...)
    
        // Event called when any type of Request is resumed.
        func requestDidResume(_ request: Request) {
            print("Resuming: \(request)")
        }
    
        // Event called whenever a DataRequest has parsed a response.
        func request<Value>(_ request: DataRequest, didParseResponse response: DataResponse<Value, AFError>) {
            debugPrint("Finished: \(response)")
        }
    }
    
    let logger = Logger()
    let session = Session(eventMonitors: [logger])
    

    【讨论】:

    • 我需要在我正在维护的测试中访问 .request - 我可以等到它以某种方式填充吗?
    • @de。是的,您可以将onURLRequestCreation 闭包添加到您的Request
    【解决方案2】:

    我必须在测试用例中获得URLRequest。通过添加.responseData 并使用XCTestExpectation 等待异步代码返回来解决它:

    func testThatHeadersContainContentEncoding() {
    
        let exp = expectation(description: "\(#function)\(#line)")
        let request = AF.request("http://test.org",
                                 method: .post, parameters: ["test":"parameter"],
                                 encoding: GZIPEncoding.default,
                                 headers: ["Other":"Header"])
        request.responseData { data in
    
            let myHeader = request.request?.value(forHTTPHeaderField: additionalHeader.dictionary.keys.first!)
            // .. do my tests
            exp.fulfill()
        }
        waitForExpectations(timeout: 10, handler: nil)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-18
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      相关资源
      最近更新 更多