如何从 NSURLRequest 配置对象中获取数据
How can I get data out of NSURLRequest config object
我在 iOS 应用程序中有一个 Angular 网络构建,并希望 POST
请求到本机层,其中一些 JSON
我可以用来构建一些本机功能。我使用旧的 UIWebView
(因为 Angular)所以我使用 NSURLProtocol
来拦截请求。这行得通,我可以在请求进入时中断。问题是我此时看不到数据 属性 中的 JSON
,因为它不是响应。该请求仍在配置对象中,但我不知道如何获取它。
我的 angular 创建 post 的代码目前是这样的:
var newdata = $.param({
json: JSON.stringify({
name: "Lee"
})
});
$http.post(url, newdata)
并且在我的 NSURLProtocol
class 中我成功拦截了这个 POST 但 HTTPBody 属性 是 nil:
override class func canInitWithRequest(request:NSURLRequest) -> Bool {
if (request.URL!.absoluteString as NSString).containsString("request_media_gallery") {
if(request.HTTPBody != nil){
let data:NSData = request.HTTPBody!
print(data)
}
return true
}
return request.URL?.host == "file"
}
如果我在 chrome 中调试它,我会因为 CORS 而得到 405,但我可以看到我的请求对象没有任何数据,但有一个配置对象。这是来自 Chrome:
的控制台日志
当 URL 请求到达协议层 IIRC 时,URL 加载系统会以多种方式对其进行清理。特别是,如果一个请求有一个与之关联的 HTTPBody
对象,它基本上是这样做的:
req.HTTPBodyStream = [NSInputStream inputStreamWithData:req.HTTPBody];
req.HTTPBody = nil;
因此,要获取数据,您需要从 HTTPBodyStream
中读取数据,而不管请求最初是使用 NSData
对象还是主体流创建的。
我在 iOS 应用程序中有一个 Angular 网络构建,并希望 POST
请求到本机层,其中一些 JSON
我可以用来构建一些本机功能。我使用旧的 UIWebView
(因为 Angular)所以我使用 NSURLProtocol
来拦截请求。这行得通,我可以在请求进入时中断。问题是我此时看不到数据 属性 中的 JSON
,因为它不是响应。该请求仍在配置对象中,但我不知道如何获取它。
我的 angular 创建 post 的代码目前是这样的:
var newdata = $.param({
json: JSON.stringify({
name: "Lee"
})
});
$http.post(url, newdata)
并且在我的 NSURLProtocol
class 中我成功拦截了这个 POST 但 HTTPBody 属性 是 nil:
override class func canInitWithRequest(request:NSURLRequest) -> Bool {
if (request.URL!.absoluteString as NSString).containsString("request_media_gallery") {
if(request.HTTPBody != nil){
let data:NSData = request.HTTPBody!
print(data)
}
return true
}
return request.URL?.host == "file"
}
如果我在 chrome 中调试它,我会因为 CORS 而得到 405,但我可以看到我的请求对象没有任何数据,但有一个配置对象。这是来自 Chrome:
的控制台日志当 URL 请求到达协议层 IIRC 时,URL 加载系统会以多种方式对其进行清理。特别是,如果一个请求有一个与之关联的 HTTPBody
对象,它基本上是这样做的:
req.HTTPBodyStream = [NSInputStream inputStreamWithData:req.HTTPBody];
req.HTTPBody = nil;
因此,要获取数据,您需要从 HTTPBodyStream
中读取数据,而不管请求最初是使用 NSData
对象还是主体流创建的。