是否有方便的方法来查看或打印NSMutableURLRequest
作为原始HTTP请求 - 即如何通过网络发送?也许当实际提出要求时?我特意不尝试提取请求的特定组件并手动将它们组合在一起。我是否在WKWebView.loadRequest(r)
的网页浏览中加载它。
通过原始请求,我的意思是它通过电线发送 - 类似于:
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"}
我问的原因是因为我的服务器似乎收到一个特定请求的空请求主体,而它接收其他请求主体。如果我可以像我在服务器上调试一样调试它 - 通过打印原始请求将非常有用。我知道我可以使用像查尔斯这样的代理工具,但我希望有更方便的答案。
答案 0 :(得分:1)
我通常只是将所有传出请求打印为带有类似类别的复制/可粘贴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
答案 1 :(得分:0)
使用RequestBin(requestb.in)来确保我不会发疯...原来在WKWebView.loadRequest(r)
中存在一个错误,其中r.HTTPBody
将不会在请求正文中传递,即使非空。叹息。