【问题标题】:POST Request Swift 3.0 AlamofirePOST 请求 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":"用户登录成功输入。"}

标签: ios swift alamofire


【解决方案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 尝试使用 responseStringresponseDataresponse 找出问题所在。

【讨论】:

  • 我不明白你的意思。我尝试更改为 responseData,同样的问题。
  • my 表示服务器端数据不是有效的 JSON
  • 我该怎么做才能弄清楚?
猜你喜欢
  • 2016-11-25
  • 2020-02-10
  • 2017-09-30
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
相关资源
最近更新 更多