ios - 在 Swift 或 Objective-C 中打印原始 HTTP 请求的便捷方式?

标签 ios objective-c swift

有没有一种方便的方法来查看或打印作为原始 HTTP 请求的 NSMutableURLRequest —— 即它是如何通过网络发送的?也许实际提出请求时?我特别尝试提取请求的特定组件并手动将它们组合在一起。 FWIW 我正在使用 WKWebView.loadRequest(r) 在 webview 中加载它。

对于原始请求,我的意思是它是通过网络发送的——类似于:

POST /target/command HTTP/1.0
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508
Content-Type: application/json
Content-Length: 38914
Custom-Header: custom-value

{"param": "value"}

我问的原因是因为我的服务器似乎收到一个特定请求的空请求主体,而它收到其他请求的请求主体。如果我可以像在我的服务器上调试一样通过打印原始请求来调试它,那将非常有用。我知道我可以使用像 Charles 这样的代理工具,但我希望有一个更方便的答案。

最佳答案

我通常只是将所有传出请求打印为具有此类类别的复制/粘贴 cURL 命令,如果不需要该功能,您可以重新格式化它。

@implementation NSURLRequest (cURLRepresentation)

- (NSString *)escapeQuotesInString:(NSString *)string {
    NSParameterAssert(string.length);

    return [string stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
}

- (NSString *)cURLRepresentation {

    NSMutableString *curlString = [NSMutableString stringWithFormat:@"-------\ncurl -k -X %@ --dump-header -", self.HTTPMethod];

    for (NSString *key in self.allHTTPHeaderFields.allKeys) {

        NSString *headerKey = [self escapeQuotesInString: key];
        NSString *headerValue = [self escapeQuotesInString: self.allHTTPHeaderFields[key] ];

        [curlString appendFormat:@" -H \"%@: %@\"", headerKey, headerValue];
    }

    NSString *bodyDataString = [[NSString alloc] initWithData:self.HTTPBody encoding:NSUTF8StringEncoding];
    if (bodyDataString.length) {

        bodyDataString = [self escapeQuotesInString: bodyDataString];
        [curlString appendFormat:@" -d \"%@\"", bodyDataString];
    }

    [curlString appendFormat:@" \"%@\"", self.URL.absoluteString];
    [curlString appendFormat:@"\n-------"];

    return curlString;
}

@end

关于ios - 在 Swift 或 Objective-C 中打印原始 HTTP 请求的便捷方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35323625/

相关文章:

swift - 找出我的守卫在 Swift 中处理错误的原因

swift - 如何使用Core Graphics快速填充三角形

swift - CoreData Fetch 所有关系属性都为真

ios - 基于CGPoint在屏幕上绘制UIView

ios - UITapGestureRecognizer 在多次点击时崩溃

ios - CoreData 应用程序中的 popToViewController

ios - 如果用户的iOS版本低于7.0,是否应该使用7.0中不推荐使用的方法?

ios - AVAudioPlayer 被释放,而键值观察者仍然在其中注册

objective-c - 我怎样才能用 CoreGraphics 画一条线,它的踪迹会在一定长度后开始消失?

ios - UITextField .text 属性总是返回一个空字符串