16

如何将 NSURLRequest 转换为 NSString ?

4

5 回答 5

47
- (NSString*) urlRequestToString:(NSURLRequest*)urlRequest
{
  NSString *requestPath = [[urlRequest URL] absoluteString];
  return requestPath;
}
于 2011-08-04T08:02:33.347 回答
9

取决于你想要在字符串中的信息。你想让它包含对象中实例变量的所有值吗?如果是这样,您将需要编写自己的方法来执行此操作。也许是子类NSURLRequest和覆盖description。您还可以使用反射来获取所有私有 ivars 并从另一个类打印所有内容。

或者只是使用调试器来检查值。

于 2010-03-06T22:20:27.380 回答
3

如果您使用的是 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"}
}
}
于 2015-04-21T13:00:59.583 回答
1
NSURLRequest *urlRequest;
...
NSLog(@"%@", [urlRequest allHTTPHeaderFields]);
NSLog(@"%@",[urlRequest valueForHTTPHeaderField:field]);

在这个例子中,urlRequest 是一个 NSURLrequest(来自上面的例子)。第二行允许您打印已添加到 NSURLRequest 的特定字段“字段”的值。

来自苹果文档

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

场地

要返回其值的标头字段的名称。为了与 HTTP RFC 保持一致,HTTP 标头字段名称不区分大小写。

返回值

与头域字段关联的值,如果没有对应的头域,则为 nil。

于 2014-03-06T11:49:28.880 回答
1

在 iOS 9 / Xcode 7 中,您可以request.URLString在 Swift 中使用(或者实际上在 Objective-C 中)

于 2016-03-02T00:28:28.697 回答