Подтвердить что ты не робот

NSURLRequest для NSString

как я могу преобразовать NSURLRequest в NSString?

4b9b3361

Ответ 1

Зависит от требуемой информации в строке. Вы хотите, чтобы он содержал все значения переменных экземпляра в объекте? Если это так, вам нужно будет написать свой собственный метод, который сделает это. Возможно, подкласс NSURLRequest и переопределить description. Вы также можете использовать рефлексию, чтобы получить все личные иголки и распечатать все из другого класса.

Или просто используйте отладчик для проверки значений.

Ответ 2

- (NSString*) urlRequestToString:(NSURLRequest*)urlRequest
{
  NSString *requestPath = [[urlRequest URL] absoluteString];
  return requestPath;
}

Ответ 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"}
}
}

Ответ 4

NSURLRequest *urlRequest;
...
NSLog(@"%@", [urlRequest allHTTPHeaderFields]);
NSLog(@"%@",[urlRequest valueForHTTPHeaderField:field]);

В этом примере urlRequest является NSURLrequest (из предыдущего примера выше). Вторая строка позволяет напечатать значение поля определенного поля, которое было добавлено в NSURLRequest.

Из документов Apple

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

поле

Имя поля заголовка, значение которого должно быть возвращено. В соответствии с HTTP RFC имена полей заголовка HTTP не чувствителен к регистру.

Возвращаемое значение

Значение, связанное с полем поля заголовка, или nil, если есть нет соответствующего поля заголовка.

Ответ 5

В iOS 9/Xcode 7 вы можете использовать request.URLString в Swift (или в Objective-C, фактически)