1

ドキュメントから、バージョンNSHTTPURLResponseを取得する方法が見つかりませんでした。HTTP(i.e. "HTTP/1.1" or "HTTP/1.0")

HTTPヘッダー フィールドは、すべてのヘッダー フィールド プロパティから使用できますが、HTTPプロトコル バージョンはヘッダーではないため、ヘッダー フィールド内には表示されませんHTTP

注: init、NSHTTPURLResponseイニシャライザ (initWithURL:statusCode:HTTPVersion:headerFields:)は入力として を必要とするHTTPVersionため、理論的にはそこに保存されている可能性があります。

ただし、HTTPVersionNSURLSessionDataTask から返された応答など、特定の応答から取得するためのプロパティまたはメソッドが見つかりませんでした。

4

2 に答える 2

3

インスタンスの http バージョンにアクセスする公的な方法はなくNSHTTPURLResponse、応答のバージョンは要求のバージョンに依存します。

CFNetworking本当に http バージョンにアクセスしたい場合に使用できます。

CFN_EXPORT CFHTTPMessageRef 
CFHTTPMessageCreateResponse(
  CFAllocatorRef  __nullable alloc,
  CFIndex         statusCode,
  CFStringRef     __nullable statusDescription,
  CFStringRef     httpVersion)              CF_AVAILABLE(10_1, 2_0);

そして、CFHTTPMessageCopyVersion()HTTP バージョンを返します。

実際には、HTTP 応答を作成するために-[NSHTTPURLResponse initWithURL:(NSURL *)URL statusCode:(NSInteger)statusCode HTTPVersion:(NSString *)version headerFields:(NSDictionary *)fields]使用します。NSURLResponse.mCFHTTPMessageCreateResponseを参照してください。

は、構造体NSURLResponseに基づいてい_CFURLResponseます。

typedef struct _CFURLResponse {
    CFRuntimeBase _base;
    CFAbsoluteTime creationTime;
    CFURLRef url;
    CFStringRef mimeType;
    int64_t expectedLength;
    CFStringRef textEncoding;
    CFIndex statusCode;
    CFStringRef httpVersion;
    CFDictionaryRef headerFields;
    Boolean isHTTPResponse;

    OSSpinLock parsedHeadersLock;
    ParsedHeaders* parsedHeaders;
} _CFURLResponse;

typedef const struct _CFURLResponse* CFURLResponseRef;

インスタンス_CFURLResponseで getter メソッドを使用して、この構造体を取得できます。NSURLResponse

CFTypeRef test = CFBridgingRetain([response performSelector:NSSelectorFromString(@"_CFURLResponse")]);
CFShow(test);
于 2016-09-06T11:04:35.743 に答える