我对Swift中的网络相对较新,尤其是POST请求。我已经阅读了Clarifai API和Alamofire的文档,但还没有弄清楚如何使用Alamofire编写工作请求。到目前为止,我已经找到了以下代码,它创建了一个符合Clarifai API的结构,它希望请求的结构如下:
curl -X POST \
-H "Authorization: Key YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d @https://api.clarifai.com/v2/models/aaa03c23b3724a16a56b629203edc62c/outputs << FILEIN
{
"inputs": [
{
"data": {
"image": {
"base64": "$(base64 /home/user/image.png)"
}
}
}
]
}
FILEIN
这是我发现的快速代码:
struct ImageObj:Codable { 让base64:String }
struct DataObj: Codable {
let image: ImageObj
}
struct InputObj: Codable {
let data: DataObj
}
struct InputsContainerObj: Codable {
let inputs: [InputObj]
}
let imageObj = ImageObj(base64: "abc123")
let dataObj = DataObj(image: imageObj)
let inputObj = InputObj(data: dataObj)
let inputsContainerObj = InputsContainerObj(inputs: [inputObj])
let encoder = JSONEncoder()
do {
let jsonData = try encoder.encode(inputsContainerObj)
let jsonString = String(data: jsonData, encoding: .utf8)!
print(jsonString) //{"inputs":[{"data":{"image":{"base64":"abc123"}}}]}
} catch _ as NSError {
}
现在我不知道在这之后应该做些什么。我尝试使用POST编写Alamofire请求,但是卡在参数上?和可编码?对于参数我尝试了类似的东西:
let parameters: Parameters = [
"Authorization: Key":"f58fce8f9cac4a6a9e6d45a57223599a",
"Content-Type":"application/json"]
但我不知道它是否正确。如果有人能帮助我,我会非常感激!祝每个人都过得愉快!
答案 0 :(得分:1)
看起来您已经根据对象和标头构造了jsonString(您将其称为“参数”)。您应该可以通过以下方式发送:
let headers: [String: AnyObject] = [
"Authorization: Key":"xxxxxxxxxxxxxxxxxxxxxxxx",
"Content-Type":"application/json"
]
Alamofire.request(.POST, "https://api.clarifai.com/v2/inputs", parameters: jsonString, headers: headers, encoding: .JSON)
.responseJSON { request, response, JSON, error in
print(response)
print(JSON)
print(error)
}
我已经将它们重命名为标题,以使其在上方更加清晰。请注意,我已经屏蔽了授权密钥(在答案和原始问题中都包括在内)-通常,您不想将其公开。