gpt4 book ai didi

ios - 无法使用 AFNetworking 2.0 使用 GET 方法获得响应

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:43:07 26 4
gpt4 key购买 nike

我无法使用这种方法获取数据,但是它在使用其他 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) {

}];

错误:

"Request failed: unacceptable content-type: text/html" UserInfo=0x8a6b000 {NSErrorFailingURLKey=http://192.168.1.156:81/a.php, AFNetworkingOperationFailingURLResponseErrorKey= { URL: http://192.168.1.156:81/a.php } { status code: 200, headers {    Connection = "Keep-Alive";    "Content-Type" = "text/html";    Date = "Tue, 20 May 2014 14:49:20 GMT";    "Keep-Alive" = "timeout=5, max=100";    Server = "Apache/2.4.4 (Win64) PHP/5.4.12";    "Transfer-Encoding" = Identity;    "X-Powered-By" = "PHP/5.4.12";} }, NSLocalizedDescription=Request failed: unacceptable content-type: 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', '{', '['

最佳答案

您的错误消息告诉您 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. 您的网络服务未设计为返回 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(@"Parsing JSON failed: %@", error);
    }

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


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

坦率地说,看起来您是手动创建了这个 JSON。最好使用 PHP 函数 json_encode 为您完成所有适当的转义,从而完全避免这些类型的 JSON 错误。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com