web-dev-qa-db-ja.com

NSStringへのNSURLRequest

nSURLRequestをNSStringに変換するにはどうすればよいですか?

16
Naeim Fard

文字列に必要な情報によって異なります。オブジェクト内のインスタンス変数のすべての値を含めるようにしますか?もしそうなら、あなたはそれを行うあなた自身のメソッドを書く必要があるでしょう。おそらくサブクラスNSURLRequestとオーバーライドdescription。リフレクションを使用して、すべてのプライベートivarを取得し、別のクラスからすべてを出力することもできます。

または、デバッガーを使用して値を検査します。

9
Marc W
- (NSString*) urlRequestToString:(NSURLRequest*)urlRequest
{
  NSString *requestPath = [[urlRequest URL] absoluteString];
  return requestPath;
}
47
Ivan Marinov

Swiftを使用している場合は、次のextensionを実装できます。

extension NSURLRequest: DebugPrintable {
    public func extendedDescription() -> String {

        var result = "<\(NSStringFromClass(self.dynamicType)): " + String(format: "%p", self)
        result += "; HTTPMethod=" + (HTTPMethod ?? "nil") + "; URL=\(URL); timeoutInterval=" + String(format: "%.1fs", timeoutInterval) + "> {"

        // Add header fields.
        if let headers = allHTTPHeaderFields {
            result += "\nallHTTPHeaderFields {"
            for (key, value) in headers {
                result += "\n\t\(key) : '\(value)'"
            }
            result += "\n}"
        }

        if let body = HTTPBody {
            result += "\nHTTPBody {\n " + ((NSString(data: body, encoding: NSASCIIStringEncoding) ?? "") as String) + "}"
        }

        return result + "\n}"
    }

    public override var debugDescription: String {
        return extendedDescription()
    }

    public override var description: String {
        return extendedDescription()
    }
}

または、この要点を確認してください: https://Gist.github.com/tomaskraina/d644af49e4968de85e34

印刷すると、次のようなものが表示されます。

<NSMutableURLRequest: 0x7fa91977e390; HTTPMethod=POST; URL=https://myapi.com/api/something; timeoutInterval=300.0s> {
allHTTPHeaderFields {
    Accept-Encoding : 'gzip'
    Content-Type : 'application/json'
    Accept : 'application/json'
}
HTTPBody {
    {"key1":"value1"}
}
}
3
Tom Kraina
NSURLRequest *urlRequest;
...
NSLog(@"%@", [urlRequest allHTTPHeaderFields]);
NSLog(@"%@",[urlRequest valueForHTTPHeaderField:field]);

この例では、urlRequestはNSURLrequestです(上記の前の例から)。 2行目では、NSURLRequestに追加された特定のフィールド「field」の値を出力できます。

From Apple docs

- (NSString *)valueForHTTPHeaderField:(NSString *)field Parameters

フィールド

値が返されるヘッダーフィールドの名前。 HTTP RFCに準拠して、HTTPヘッダーフィールド名では大文字と小文字が区別されません。

戻り値

ヘッダーフィールドフィールドに関連付けられた値。対応するヘッダーフィールドがない場合はnil。

1
Jim Holland

IOS 9/Xcode 7では、Swift(または実際にはObjective-C)でrequest.URLStringを使用できます)

1
Dan Rosenstark