我正在使用AlamoFire对Google Cloud Prediction中的其中一个模型进行POST查询。每当我发送请求时,我都会返回一条错误消息:该API不支持解析表单编码的输入。
经过一番研究,我发现需要将Content-Type HTTP标头设置为“ 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)
        }
}

最佳答案

万一有人还在寻找答案,我设法在没有Alamofire的情况下从我的iOS客户端访问GooglePredictionAPI:

    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()
    }

10-05 20:53
查看更多