有没有一种方便的方法来查看或打印作为原始 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/