我有一个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?
打扰一下,如果英语不正确
答案 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
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
之间切换
您可以尝试各种其他适合您请求的编码。