Swift 中的 Alamofire HTTP 发布请求
Posted
技术标签:
【中文标题】Swift 中的 Alamofire HTTP 发布请求【英文标题】:Alamofire HTTP post request in Swift 【发布时间】:2015-09-11 22:42:19 【问题描述】:我正在尝试向链接发出 HTTP 请求;响应采用 JSON 格式。
我无法正确获得响应。我是 Swift 新手,我不知道问题出在哪里……
我要访问的网址是 http://url/test.r&pcTest=pTest
我已经这样做了,但在 Objective C 中:
NSString *serviceURL = [NSString stringWithFormat:@"http://url/test.r&pcTest=pTest"];
NSURL *URL = [NSURL URLWithString:[serviceURL stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
NSData *data = [NSData dataWithContentsOfURL:URL];
if (!data)
NSLog(@"null");
NSString *response = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] ;
if (![response isEqualToString:@"UNAUTHORIZED"])
response = [response stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
data = [response dataUsingEncoding:NSASCIIStringEncoding];
NSLog(@"%@",response);
else
//return nil;
NSLog(@"dsfg");
我得到了正确的答案。在 Swift 中,我的代码是:
let parameters = ["pcTest": "pTest"]
let urlPath :String = "http://url/test.r"
Alamofire.request(.POST, urlPath, parameters: parameters)
.response request, response, data, error in
println(request)
println(response)
println(error)
println(data)
回复是
网址:http://url/test.r
可选( URL:http://url/test.r 状态码:200,标头 连接=“保持活动”; “内容类型”=“文本/javascript;字符集=iso-8859-1”; 日期 =“格林威治标准时间 2015 年 9 月 11 日星期五 22:34:12”; “保活”=“超时=5,最大值=400”; 服务器 = "Apache/1.3.41 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8c"; “传输编码” = 身份; )
无
可选(
响应应该是:
"Bank":["Year":"2014","Clv":"01","Desc":"1345","Year":"2014","Clv. ..等等等等
【问题讨论】:
【参考方案1】:如果要解析JSON,需要调用responseJSON
,而不是response
:
let parameters = ["pcTest": "pTest"]
Alamofire.request(.GET, "http://url/test.r", parameters: parameters)
.responseJSON _, _, result in
print(result)
debugPrint(result)
【讨论】:
我试图实现你的答案,但输出是:nil nil 那么要么 (1) 服务器没有使用 JSON 响应您的请求,(2) 内容类型无效,或者 (3) HTTP 状态码不指示成功 是的,我收到了这个错误:(Error Domain=NSCocoaErrorDomain Code=3840“操作无法完成。(Cocoa 错误 3840。)”(无法将数据转换为字符 67 周围的字符串。 ) UserInfo=0x7fede1e436b0 NSDebugDescription=无法将数据转换为围绕字符 67 的字符串。) 听起来您的服务器没有使用 JSON 规范要求的 UTF 编码 在您的 Objective-C 代码中,您使用的是 ASCII 编码,这不是 JSON 规范的一部分。您必须像在 Obj-C 中一样在 Swift 中手动转换数据。以上是关于Swift 中的 Alamofire HTTP 发布请求的主要内容,如果未能解决你的问题,请参考以下文章
使用 Alamofire 的 swift 3.0 中的 URL 问题
Swift - 失败:Alamofire 中的 responseValidationFailed(状态码 401)