在Postman中请求REST POST API工作但在Alamofire中不起作用

时间:2016-07-07 18:56:04

标签: swift alamofire postman

我有一个api,返回一个非常简单的JSON。

首先,包含api的服务器在我的本地计算机(localhost)中,在这种情况下,一切正常。

当我尝试从iPhone应用程序(使用Alamofire)连接到托管api时,我将api传递给了网络托管

Alamofire.request(.POST, "https://domain.com/api/search", parameters: ["ubicacion": ubicacionId, "fecha":"\(dateFormatter.stringFromDate(fecha))"], encoding: .URL)
            .responseJSON { response in
                switch response.result {
                case .Success:
                    print(response.request)  // original URL request
                    print(response.response) // URL response
                    print(response.result)   // result of response serialization
                    self.JSON = response.result.value!
                    //llamar el delegate
                    self.delegate.devolverjson(self.JSON)
                case .Failure(let error):
                    print(response.request)  // original URL request
                    print(response.response) // URL response
                    print(response.result)   // result of response serialization
                    self.JSON = ["error":error]
                    //llamar el delegate
                    self.delegate.devolvererror(self.JSON)
                }
        }

在这种情况下,response.response是:

{ URL: https://domain.com/api/search } { status code: 405, headers {
    "Cache-Control" = "no-cache, private";
    Connection = "Keep-Alive";
    "Content-Type" = "text/html; charset=UTF-8";
    Date = "Thu, 07 Jul 2016 18:24:26 GMT";
    "Keep-Alive" = "timeout=3, max=30";
    Server = "Apache Phusion_Passenger/4.0.10 mod_bwlimited/1.4 mod_fcgid/2.3.9";
    "Transfer-Encoding" = Identity;
    "X-Powered-By" = "PHP/5.6.22";
    allow = POST;
} })

response.result.Failure

错误是

error: {
    error = "Error Domain=NSCocoaErrorDomain Code=3840 \"Invalid value around character 0.\" UserInfo={NSDebugDescription=Invalid value around character 0.}";
}

当我从Postman连接到api(相同的URL:https://domain.com/api/search)时,api会返回正确的信息(JSON),并显示此标题。

Cache-Control →no-cache
Connection →Keep-Alive
Content-Type →application/json
Date →Thu, 07 Jul 2016 18:23:38 GMT
Keep-Alive →timeout=3, max=30
Server →Apache Phusion_Passenger/4.0.10 mod_bwlimited/1.4 mod_fcgid/2.3.9
Transfer-Encoding →chunked
X-Powered-By →PHP/5.6.22

为什么API与Postman一起使用,不适用于Alamofire?

打扰一下,如果英语不正确

4 个答案:

答案 0 :(得分:0)

response.request是否与您在Postman中尝试过的网址相匹配? 你尝试过Alamofire.request(.GET,url)而不是.POST吗? 我在一个项目中遇到了一些参数问题,所以我之前编写了我的网址并使用了没有参数的Alamofire但是使用了格式化网址。

答案 1 :(得分:0)

尝试在您的网址中添加尾部斜杠:

https://domain.com/api/search/

答案 2 :(得分:0)

我在Swift 4.2 Xcode 10中遇到了相同的错误。

我在Postman中将URL用作18.222.156.118/Service/v1/SignIn,并传递了参数

UserPhone:7021844116 RequestCd:R28

它在邮递员中正常工作。

当我在Alamofire

中使用相同的URL时
    let parameters: Parameters = ["UserPhone": self.textfieldPhoneNumber.text!,
                                  "RequestCd": "R28"]

    // All three of these calls are equivalent
    Alamofire.request("18.222.156.118/Service/v1/SignIn",method: .post, parameters: parameters, encoding: URLEncoding.default).responseJSON { response in
        print("Result: \(String(describing: response.request))")
        print("Result: \(String(describing: response.response))")
        print("Result: \(response.result)")
        MBProgressHUD.hide(for: self.view, animated: true)

        if let json = response.result.value as? [String:Any] {
            print("JSON VALUE --- \(json)")
            if json["ErrorCode"] as?  Int ==  0 {
              print("got success")

            }else{
                 Print("error")
            }
        }
    }

我收到错误消息Domain=NSURLErrorDomain Code=-1002 "unsupported URL" 我最初添加了http://

正确的URL为http://18.222.156.118/Service/v1/SignIn 终于奏效了。  由于Google Postman在内部添加了hhttp:\。

答案 3 :(得分:0)

我今天有一个类似的问题。我的解决方法是更改​​请求的编码。

我在URLEncoding()JSONEncoding.default之间切换

您可以尝试各种其他适合您请求的编码。