我在网上与来自不同项目的不同人员一起工作,他们负责后端API who服务。通常,我在发送和接收JSON方面没有问题,但这一次,我似乎无法正确地将JSON发送到服务器。
通常,我使用Alamofire接收和发送JSON消息,通常的调用如下所示:
let param = populateParamWithDictionary();
let url = "https://www.example.com";
Alamofire.request(.POST, url, parameters: param, headers: nil)
.responseJSON { response in {
// take care of response here
}
但这一次,我得到了后端程序员要求我使用OAuth v2的项目。因此,假设我已经开发了一个函数,它已经负责获取access_token字符串。这个函数现在变成这样:
let param = populateParamWithDictionary();
let url = "https://www.example.com";
let headers : Dictionary<String, String> = [
"Content-Type":"application/json",
"Authorization":"Bearer \(access_token)"
];
Alamofire.request(.POST, url, parameters: param, headers: headers)
.responseJSON { response in {
// take care of response here
}
但结果并非如此,我得到了400个错误的请求。我甚至试过这样做:
let param = populateParamWithDictionary();
let url = "https://www.example.com";
let headers : Dictionary<String, String> = [
"Content-Type":"application/json",
"Authorization":"Bearer \(access_token)"
];
Alamofire.request(.POST, url, parameters: param, encoding: ParameterEncoding.JSON, headers: headers)
.responseJSON { response in {
// take care of response here
}
但结果更糟。这就是我打印回复时得到的。
失败:错误Domain=NSURLErrorDomain代码=-1017“无法解析响应”UserInfo={NSUnderlyingError=0x7fbb505788f0 { Domain=kCFErrorDomainCFNetwork代码=-1017 "(null)“UserInfo={kCFStreamErrorCodeKey=-1,_kCFStreamErrorDomainKey=4},NSErrorFailingURLStringKey=http://lfapp.learnflux.net/v1/me,NSErrorFailingURLKey=http://lfapp.learnflux.net/v1/me,_kCFStreamErrorDomainKey=4,_kCFStreamErrorCodeKey=-1,NSLocalizedDescription=cannot解析响应}
但是,如果我使用REST客户端,通过将头设置为具有身份验证和内容类型,并将参数写入为普通内容(例如在正文内容中的平原API中),则请求可以工作。
我怎么才能解决这个问题?
编辑:带有访问令牌的部分已经清除。访问令牌可以工作。如果API不需要任何参数,我可以成功地调用API (可能是因为在服务器上,代码根本不需要检查或验证主体,因为它不需要任何参数,因此不会引发错误)。问题是当我提出一个需要任何参数的请求时。
发布于 2016-09-16 02:56:50
您所犯的错误可能是由于请求中的encoding: ParameterEncoding.JSON
。尝试将其更改为encoding: .URLEncodedInURL
。如果这对您没有帮助,请将参数添加到问题中,如果您请求获得令牌,请执行以下操作:
if let access_token = json["access_token"]!{
// Make the request here when you know that you have your token
}
https://stackoverflow.com/questions/37676079
复制相似问题