Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSURLRequest to NSString

how can i convert NSURLRequest to NSString ?

like image 707
Naeim Fard Avatar asked Mar 06 '10 22:03

Naeim Fard


3 Answers

- (NSString*) urlRequestToString:(NSURLRequest*)urlRequest
{
  NSString *requestPath = [[urlRequest URL] absoluteString];
  return requestPath;
}
like image 123
Ivan Marinov Avatar answered Nov 02 '22 11:11

Ivan Marinov


Depends on the information you want in the string. Do you want to have it contain all the values of the instance variables in the object? If so, you're going to need to write your own method that does that. Perhaps subclass NSURLRequest and override description. You could also use reflection to get at all the private ivars and print everything out from another class.

Or just use a debugger to inspect the values.

like image 43
Marc W Avatar answered Nov 02 '22 12:11

Marc W


If you're using swift, you can implement the following 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()
    }
}

Or check out this gist: https://gist.github.com/tomaskraina/d644af49e4968de85e34

If printed out, it displays something similar to the following:

<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"}
}
}
like image 21
Tom Kraina Avatar answered Nov 02 '22 13:11

Tom Kraina