在 swift2 中使用 Alamofire pod 时 POST 请求不起作用?

Posted

技术标签:

【中文标题】在 swift2 中使用 Alamofire pod 时 POST 请求不起作用?【英文标题】:POST request not working while using Alamofire pod in swift2? 【发布时间】:2015-12-29 09:44:20 【问题描述】:

我正在 Swift 2 中做一个演示应用程序,它发出一个 HTTP POST 请求。但是不明白为什么我的请求没有到达服务器。 我正在使用Alamofire 3.0Xcode 7.2swift 2.0。 我基于这个link安装了Alamofire pod:https://github.com/Alamofire/Alamofire#requirements

我的字符串是

str = "videostitle,videourl,imageurl"

我的代码是:

Alamofire.request(
    .POST,
    url,
    parameters: Dictionary(),
    encoding: .Custom(
        (convertible, params) in
        let mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest
        mutableRequest.setValue("application/graphql", forHTTPHeaderField: "Content-Type")
        mutableRequest.HTTPBody = str.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
        return (mutableRequest, nil)
    ),
    headers: nil
).responseJSON
    (JSON) -> Void in
        if  JSON.result.value != nil
        
            print(JSON.result.value)
            self.delegate.successReponse(JSON.result.value!, withType: type)      
         
        else
           
        

当我打印JSON.result.value 时,它显示如下:

Optional(
    errors = (
        
        
    );
)

我不明白为什么它没有到达服务器。

【问题讨论】:

可能是服务器没有返回任何数据?您应该打印在控制台中发出的请求的 http 响应并检查 你说“它没有命中服务器”,你真的检查过服务器日志吗?您的网址正确吗? @jcaron 是的,我检查了服务器日志,而且我的网址在邮递员中也可以正常工作。 你的服务器网址是 https 吗? 【参考方案1】:

你以前做过吗? info.plist 中的应用程序传输安全性。 https://github.com/Alamofire/Alamofire 其次,参数没有任何东西。应该将您的字符串更改为字典。

您可以使用 json 将字符串制作成字典。

let data = changestring.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
var dict = NSDictionary()
do
    //dict = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSDictionary
    dict = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as! NSDictionary

catch


NSLog("this is dict \(dict)")

或者您可以将 NSDictionary 传递给参数。

Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters, encoding: .JSON)

如果您想使用其他方法进行 HTTP POST 和 GET,此链接适合您:https://github.com/RYANCOAL/swift-with-AFNetworking/blob/master/TestHTTPTests/TestHTTPTests.swift

手动验证 Alamofire.validate(contentType: ["application/json"]) 可以搜索 contentType 的值,我不知道它可以/不能设置 contentType。

【讨论】:

以上是关于在 swift2 中使用 Alamofire pod 时 POST 请求不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

swift 2.1 alamofire 超时方法

使用 Alamofire 3.0+ 在 swift 2.2 中使用 JSON 对象发送 POST 请求

Alamofire 自定义响应从 Alamofire v1.3 迁移到 3.0(和 Swift 2 语法)

Swift 2 - 使用 Alamofire 时函数不返回 Bool

Alamofire 2.0 和 Swift 2 - 标头不工作。看看如何修复它

如何使用 Alamofire (Swift 2.2) 获取 Twitter 访问令牌