POST 请求 Swift 3.0 Alamofire
Posted
技术标签:
【中文标题】POST 请求 Swift 3.0 Alamofire【英文标题】:POST Request Swift 3.0 Alamofire 【发布时间】:2017-02-04 10:58:55 【问题描述】:我正在尝试在 Swift 3 中使用 Alamofire 执行 .POST 请求。我编写了以下函数
func postToken(Token: String)
let parameters : [String:Any] = ["api_key":"ivaomobileapp", "function":"login", "IVAOTOKEN=":"\(Token)"]
Alamofire.request("URL", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: nil).responseJSON (response:DataResponse<Any>) in
switch(response.result)
case .success(_):
if let data = response.result.value
print(data)
break
case .failure(_):
print(response.result.error as Any)
break
但是代码不起作用,它给出了以下错误:
Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo=NSDebugDescription=Invalid value around character 0.))
这与 CURL(UNIX) 中的请求相同
curl https://whatever -X POST -F 'api_key=ivaomobileapp' -F 'function=Login' -F 'IVAOTOKEN=whatever'
我做错了什么?
谢谢
【问题讨论】:
服务器端响应不正常,你的代码没问题 答案是无效的 JSON 对象。 @Anbu.Karthik 我让它现在返回 JSON,仍然是同样的问题。 验证你的 json 一次, @Anbu.Karthik 这是我现在返回的内容:"msg":"用户登录成功输入。" 【参考方案1】:我认为您以错误的方式处理添加了 IVAOTOKEN
参数,从而导致问题,可能会创建格式错误的字典。也许您的参数应该如下所示:
let parameters : [String:Any] = [
"api_key": "ivaomobileapp",
"function": "login",
"IVAOTOKEN": Token
]
Alamofire 将在 Token
变量周围添加引号,因为它是一个字符串。结果应该是以下内容被发送到服务器:
"api_key": "ivaomobileapp",
"function": "login",
"IVAOTOKEN": "TOKENVALUE"
【讨论】:
发送 api_key 参数时出现问题,在 CURL 请求中如下 'api_key=ivaomobileapp'。我应该把 = 放在 Alamofire 的某个地方吗?抱歉,我从来没有用 Alamofire 做过 POST 请求 :( 好吧,您是否真的将值ivaomobileapp
用于 api_key
参数?我认为一把钥匙看起来实际上看起来有些不同。也许像某种随机散列。无论哪种方式,=
符号都不应该是参数键的一部分。 Alamofire 会将您的参数转换为有效的 JSON,因此会在键和值之间添加 =
符号。
我认为您应该 100% 确定您可以将此值用作 API 密钥,因为它非常不寻常。通常它是随机散列或类似的。特别是如果你将它与 Facebook、Twitter、Flickr 等的 API 密钥进行比较......
是的,完全确定,CURL 使用该值。我的中国伙伴制作了这个 API,所以可能是普通话和英语之间的误译。
嗯,与您的 curl 请求不同的是,在您的 curl 请求中,您实际上不发送 JSON,而是使用表单请求。因此,您可能想要更改不同类型的请求。如果您的服务器支持,或者将您的 curl 请求转换为 JSON 请求。【参考方案2】:
来自服务器的响应不是有效的 json 尝试使用 responseString
、responseData
或 response
找出问题所在。
【讨论】:
我不明白你的意思。我尝试更改为 responseData,同样的问题。 my 表示服务器端数据不是有效的 JSON 我该怎么做才能弄清楚?以上是关于POST 请求 Swift 3.0 Alamofire的主要内容,如果未能解决你的问题,请参考以下文章
使用 Alamofire 3.0+ 在 swift 2.2 中使用 JSON 对象发送 POST 请求
Swift 2.0 + Alamofire 3.0 - 缓慢加载 JSON
Alamofire4在使用方法时抛出“额外参数方法”:.post