[英]Provide HTTPVersion to NSHTTPURLResponse
我的應用程序使用自定義NSURLProtocol
子類。 我需要用我的副本替換NSHTTPURLResponse
,修改一些標題字段。 因此,我創建了新的NSHTTPURLResponse
實例,如下所示:
@implementation NSHTTPURLResponse (CocoaFix)
- (instancetype)HTTPResponseByRemovingValueForHeaderFields:(NSArray *)fields {
NSMutableDictionary *mutableHeaderFields = [self.allHeaderFields mutableCopy];
[mutableHeaderFields removeObjectsForKeys:fields];
return [[[self class] alloc] initWithURL:self.URL
statusCode:self.statusCode
HTTPVersion:@"HTTP/1.1" // What should I pass here?
headerFields:mutableHeaderFields];
}
@end
HTTPVersion
參數出現問題。 我沒有找到任何方法從原始響應中獲取此值。
文檔說:
這通常表示為“HTTP/1.1”。
但是提供硬編碼值看起來不是一個解決方案,它會一直正常工作。
請幫我解決這個問題。
根據這個答案: NSURLRequest http 協議版本,您可能至少需要橋接到 CFNetwork API 才能做到這一點。
根據 CFNetwork 團隊的說法,至少在一年前,還沒有獲得該信息的實用方法。 事實上,從頭文件的運行時分析來看,我懷疑它是否已經被存儲了。
如果我是對的,那么從那時起它對網絡堆棧的行為也沒有影響,所以你可以說它是“HTTP/999.99”,這無關緊要。
NSURLSessionTaskTransactionMetrics
類具有名為networkProtocolName
屬性。 這個類實例是數組的元素之一,它也是一個名為transactionMetrics
的屬性,它是NSURLSessionTaskMetrics
成員,它是名為..didFinishCollectingMetrics:..
的回調方法中名為metrics
輸入參數,它是NSURLSessionTaskDelegate
協議的一部分。
例如:
- (void)URLSession:(NSURLSession *)session
task:(NSURLSessionTask *)task
didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) {
self.redirectCount = metrics.redirectCount;
self.networkProtocolName = metrics.transactionMetrics.lastObject.networkProtocolName;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.