【问题标题】:Alamofire HTTP post request in SwiftSwift 中的 Alamofire HTTP 发布请求
【发布时间】: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. ..等等等等

【问题讨论】:

    标签: ios swift http-post alamofire


    【解决方案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 中手动转换数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多