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)

swift中的Alamofire InvalidURL

Swift中的Alamofire分段上传帖子错误

在 swift 中使用 alamofire 发送 JSON 数组作为参数

Swift Alamofire HTTP 获取请求