我正在使用 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/