我有一个返回非常简单的 JSON 的 API。
首先,包含 api 的服务器在我的本地计算机(本地主机)中,在这种情况下,一切正常。
当我尝试从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一起工作?
如果英语不正确,请原谅
我今天遇到了类似的问题。我的解决方法是更改请求的编码。
我在URLEncoding()
和JSONEncoding.default
之间切换
您可以尝试适合您请求的各种其他编码。
尝试在网址中添加尾部斜杠:
https://domain.com/api/search/
response.request 是否与您在 Postman 中尝试的 url 匹配?你试过 Alamofire.request(.GET, url) 而不是 .发布?我在一个项目中的参数遇到了一些问题,所以我之前格式化了我的 url,并使用了没有参数但格式化的 url 的 Alamofire。
我在 Swift 4.2 Xcode 10 中遇到了同样的错误。
我在邮递员中使用 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://
。
http://18.222.156.118/Service/v1/SignIn
正确的网址它终于奏效了。 由于谷歌邮递员内部添加了hhttp:\。