我在SO中阅读答案并检查了官方的Alamofire文档,但大多数答案都增加了JSON数据是否被添加到URL参数或正文中的混淆。
HTTP请求必须包含一个参数键,它等于我访问API的API密钥和包含图像数据的JSON以及与API相关的一些数据。
带有request参数的URL如下所示: https://vision.googleapis.com/v1/images:annotate?key=My_API_Key 并且JSON结构位于This link.
我的Swift代码看起来像这样。
import SwiftyJSON
import Alamofire
// all imports are done
func requestAPI(body:JSON) -> JSON {
let APIKey:String = "My_API_KEY"
let header = ["Content-Type":"application/json"]
let url:String = "https://vision.googleapis.com/v1/images:annotate"
let parameters = ["key":APIKey]
var response = Alamofire.request(.POST,url,headers:header,parameters:parameters)
response.validate().responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
print("JSON: \(json)")
print(response.request)
}
case .Failure(let error):
print(error)
}
}
return body //dummy return
}
我确实通过了Alamofire文档。 来自 使用URL编码参数的POST请求 文档部分,
let parameters = [
"foo": "bar",
"baz": ["a", 1],
"qux": [
"x": 1,
"y": 2,
"z": 3
]
]
Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters)
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3
我对此的理解是,作为参数传递的JSON被添加为HTTp POST请求的URL(类似于我的请求的密钥:My_API_Key部分)的参数。并使用.JSON作为编码选项将参数参数添加为请求的JSON主体。我该怎么做(要进行URL编码的参数键和要添加到HTTP正文的JSON数据)? Alamofire的请求方法似乎是使用相同的参数进行2中的任何一个。
我尝试创建NSURLMutableRequest并添加正文。但是在访问SwiftyJSON JSON对象的rawValue时,我收到以下错误。 错误:电话可以抛出,但没有标记为'尝试'并且不处理错误 如果让bodyData:NSData = body.rawData(){
这是代码。
func requestAPI(body:JSON) -> JSON {
let APIKey:String = "My_API_Key"
let header = ["Content-Type":"application/json"]
let url = NSURL(string:"https://vision.googleapis.com/v1/images:annotate")
let parameters = ["key":APIKey]
var request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "POST"
if let bodyData:NSData = body.rawData(){
request.HTTPBody = bodyData
}
let encoding = Alamofire.ParameterEncoding.URL
(request, _) = encoding.encode(request, parameters: parameters) // Parameters are added here
var response = Alamofire.request(.POST,url!,headers:header,parameters:parameters)
response.validate().responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
print("JSON: \(json)")
//return json
print(response.request)
}
case .Failure(let error):
print(error)
}
}
return body //dummy return
}
在何处以及如何将请求的HTTP主体设置为JsonData并使用参数对URL进行编码?