json - AlamoFire 请求 Google Cloud Prediction API iOS 解析错误

标签 json swift alamofire google-cloud-platform access-token

我正在使用 AlamoFire 对 Google Cloud Prediction 中的一个模型进行 POST 查询。每当我发送请求时,都会收到一条错误消息:此 API 不支持解析表单编码输入。
经过一番研究后,我发现我需要将 Content-Type HTTP header 设置为“application/json”。希望您能找到我在提出请求时错过的东西。这是我的代码:

let parameters = [
        "access_token" : accessToken,
        "input": [
            "csvInstance": [
                "This is very positive"
            ]

        ]
]
Alamofire.Manager.sharedInstance.session.configuration
            .HTTPAdditionalHeaders?.updateValue("application/json",
                                                forKey: "Accept")
Alamofire.Manager.sharedInstance.session.configuration
            .HTTPAdditionalHeaders?.updateValue("application/json",
                                                forKey: "Content-Type")
Alamofire.request(.POST, "https://www.googleapis.com/prediction/v1.6/projects/mailanalysis-1378/trainedmodels/10kTweetData/predict", parameters: parameters).responseJSON { (response) in
        if let JSON = response.result.value {
            print("JSON: \(JSON)")
            //print("refresh token = " + auth.accessToken)
        }
}

最佳答案

如果有人仍在寻找答案,我设法从我的 iOS 客户端访问 GooglePredictionAPI,而无需使用 Alamofire:

    var accessToken: String?

    GIDSignIn.sharedInstance().currentUser.authentication.getTokensWithHandler { (authentication, error) in

        if let err = error {
            print(err)
        } else {
            if let auth = authentication {
                accessToken = auth.accessToken
            }
        }
    }

    if let accTok = accessToken {

        let parameters = [
                        "input": [
                            "csvInstance": [
                                0.9,
                                0.14,
                                -0.41,
                                1.61,
                                -1.67,
                                1.57,
                                -0.14,
                                1.15,
                                0.26,
                                -1.52,
                                -1.57,
                                3.65
                            ]

                        ]
                    ]

        let url = NSURL(string: "https://www.googleapis.com/prediction/v1.6/projects/ExermotePredictionAPI/trainedmodels/getExercise/predict")

        let session = URLSession.shared

        let request = NSMutableURLRequest(url: url! as URL)
        request.httpMethod = "POST" //set http method as POST

        do {
            request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)

        } catch let error {
            print(error.localizedDescription)
        }

        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")
        request.addValue("Bearer \(accTok)", forHTTPHeaderField: "Authorization")

        let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

            guard error == nil else {
                return
            }

            guard let data = data else {
                return
            }

            do {
                if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: AnyObject] {
                    print(json)
                }

            } catch let error {
                print(error.localizedDescription)
            }

        })

        task.resume()
    }

关于json - AlamoFire 请求 Google Cloud Prediction API iOS 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38517287/

相关文章:

objective-c - NSVisualEffectView 上的 NSScrollView/NSCollectionView 导致闪烁

iOS:Google Maps API - 禁用信息窗口点击事件

ios - 如何安全地解包我的核心数据对象

swift - 带有请求参数和 header 的分段上传 (Alamofire)

iOS 12.4.1 发布导致 iPad 设备被苹果商店拒绝崩溃

javascript - 无法在 JQuery 中正确解析 JSON 数据

java - Jackson DataBing 版本 2.9.5 无法将对象解析为 JSON 字符串

windows - Cmd树到Json

c - 在 C 中将 JSON 数组元素分隔为字符串

swift - Alamofire.request "Extra argument ' 方法'在调用中”