OStack程序员社区-中国程序员成长平台

标题: ios - 使用 GET 方法无法使用 AFNetworking 2.0 获得响应 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 07:56
标题: ios - 使用 GET 方法无法使用 AFNetworking 2.0 获得响应

我无法使用这种方法获取数据,但是在使用其他 url 时它可以工作,而且我还在 postman 中进行了测试,我得到了响应。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

// if you want to sent parameters you can use above code

manager.requestSerializer = [AFJSONRequestSerializer serializer];

[manager GET"http://192.168.1.156:81/a.php" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSLog(@"responseObject %@",responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

}];

错误:

“请求失败: Not Acceptable 内容类型:text/html” UserInfo=0x8a6b000 {NSErrorFailingURLKey=http://192.168.1.156:81/a.php, AFNetworkingOperationFailingURLResponseErrorKey= { URL: http://192.168.1.156:81/a.php } { 状态码:200,标题 {
    连接=“保持事件”;
    “内容类型”=“文本/html”;
    日期 =“格林威治标准时间 2014 年 5 月 20 日星期二 14:49:20”;
    “保活”=“超时=5,最大值=100”;
    服务器 = "Apache/2.4.4 (Win64) PHP/5.4.12";
    “传输编码” = 身份;
    "X-Powered-By"= "PHP/5.4.12";
} }, NSLocalizedDescription=请求失败: Not Acceptable 内容类型:text/html}

NSArray 转换错误:

Parsing JSON failed: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid escape sequence around character 4677.) UserInfo=0xa82c130 {NSDebugDescription=Invalid escape sequence around character 4677.}

Parse error on line 258:
...     "story_title": "today\'s story",  
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['



Best Answer-推荐答案


您的错误消息告诉您 AFNetworking 期待 JSON 响应(即响应 header 的 Content-Type 应该是 application/json 并且响应的正文应该是实际的 JSON)。

这里有多种可能性之一:

  1. 您的服务正在返回 JSON 正文,但忽略指定 Content-Type header 。在您的 PHP 代码中,在发送任何数据之前,指定 Content-Type header :

    header("Content-Type: application/json");
    

    如果您无法修复 PHP(这是首选解决方案),您也可以告诉 AFNetworking 也接受 text/html 作为 Content-Type。我没有对此进行测试,但类似下面的内容应该将 text/html 添加到默认 AFJSONResponseSerializeracceptableContentTypes 集合中:

    manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject"text/html"];
    
  2. 您的 Web 服务并非旨在返回 JSON。在这种情况下,您应该配置 manager 以接受非 JSON 响应,例如:

    mananger.responseSerializer = [AFHTTPResponseSerializer serializer];
    
  3. 您的 Web 服务旨在正确返回 JSON 响应,但遇到了一些程序错误,导致无法正确生成 JSON。在这种情况下,临时更改 manager 以接受非 JSON 响应(如上面的第 2 点),然后检查响应(当然,假设您已经配置了php.ini 报告错误):

    NSLog(@"responseObject = %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding);
    

    如果您看到的是 JSON,您可以使用 NSJSONSerialization 将其转换为数组:

    NSError *error;
    NSArray *array = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error];
    if (!array) {
        NSLog(@"arsing JSON failed: %@", error);
    }
    

    显然,您可以将这个本地 NSArray 对象保存到您想要的任何类属性或实例变量中。


您已使用 JSON 解析错误更新您的问题。这是 JSON 中 \ 字符的结果。那是无效的。 (将您的 JSON 粘贴到 http://jsonlint.com 中,它会确认这一点。)您的 PHP 没有正确生成 JSON。删除 ' 之前的那个 \。只有在 JSON 中包含双引号时,才应使用此反斜杠转义。

坦率地说,您似乎手动创建了这个 JSON。使用 PHP 函数 json_encode 会更好,它会为您完成所有适当的转义,完全避免这类 JSON 错误。

关于ios - 使用 GET 方法无法使用 AFNetworking 2.0 获得响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762900/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4