如何从NSURLRequest配置对象

时间:2016-03-17 13:26:04

标签: ios angularjs json nsurlrequest

我在iOS应用程序中有一个Angular Web构建,并希望POST请求到本机层,并使用一些JSON来构建一些本机功能。我正在使用旧的UIWebView(因为Angular),因此使用NSURLProtocol来拦截请求。这有效,我可以在请求进入时断开。问题是此时我无法在data属性中看到JSON,因为它不是响应。请求仍然在配置对象中,但我不知道如何抓住它。

我创建帖子的角度代码目前是这样的:

var newdata = $.param({
            json: JSON.stringify({
                name: "Lee"
            })
        });

        $http.post(url, newdata)

在我的NSURLProtocol课程中,我在此方法中成功拦截了此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的控制台日志:

console log

1 个答案:

答案 0 :(得分:4)

当URL请求到达协议层IIRC时,URL加载系统会以很多方式对其进行清理。特别是,如果请求具有与之关联的HTTPBody对象,则它基本上会这样做:

req.HTTPBodyStream = [NSInputStream inputStreamWithData:req.HTTPBody];
req.HTTPBody = nil;

因此,要获取数据,您需要从HTTPBodyStream读取,无论该请求最初是使用NSData对象还是正文流创建的。