ios - 如何从 NSURLRequest 配置对象中获取数据

标签 ios angularjs json nsurlrequest

我在 iOS 应用程序中有一个 Angular Web 构建,并且想要 POST使用一些 JSON 向 native 层请求我可以用它来构建一些 native 功能。我正在使用旧的 UIWebView (因为 Angular)所以我使用 NSURLProtocol拦截请求。这行得通,我可以在请求进入时中断。问题是我看不到 JSON此时在 data 属性中,因为它不是响应。该请求仍在配置对象中,但我不知道如何获取它。

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

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

        $http.post(url, newdata)

在我的NSURLProtocol类我在此方法中成功拦截了此 POST,但 HTTPBody 属性为零:
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

最佳答案

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

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

因此,要获取数据,您需要从 HTTPBodyStream 中读取数据。 ,无论请求是否最初是使用 NSData 创建的对象或主体流。

关于ios - 如何从 NSURLRequest 配置对象中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36061918/

相关文章:

ios - UINavigationBar 横向标题字体大小

ios - 通过 Testflight 安装新版本时 NSUserDefaults 是否持续存在?

javascript - 在 ngRoute 中使用嵌套 Controller - AngularJS

java - 如何将多列与其他列一起以 JSON 形式返回

javascript - 使用javascript的Strapi日期格式

java - 高效且干净地解析 JSON 字符串

ios - 限制 iOS 上的文本输入边界

ios - SwiftUI:不要刷新自定义 View MacOS 应用程序

CSS - 如果两个 css 类与其他 css 类一起存在,则应用 css 规则

javascript - 为什么这个 angularjs 应用程序没有启动?