0

我尝试使用 AFNetworking 查询弹性搜索 (Searchbox.io) 的托管实例。不幸的是,我似乎无法让语法正常工作。例如,以下使用 curl 的语句可以正常工作,并且返回的正是我所期望的。

curl -XGET 'http://api.searchbox.io/api-key/<MYAPIKEY>/<MYINDEX/_search' -d '{"query" : {"query_string" : {"query" : "searchTerm"}}}'

我从 Searchbox.io 取回包含“searchTerm”的文档。极好的。但是,当我尝试在 AFNetworking 中实现相同功能时,Searchbox.io API 返回 500 错误,并指出“解析失败 [无法解析源 [ na ]]];嵌套” 下面是我的 AFHTTPClient 子类中的调用。

NSDictionary *searchDict = @{@"query":@{@"query_string":@{@"query":@"searchTerm"}}};

[self getPath:[NSString stringWithFormat:@"_search"]
    parameters:searchDict
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
   if ([responseObject isKindOfClass:[NSDictionary class]]) {
       NSLog(@"Search Results: \n\n %@", responseObject);
   }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
   NSLog(@"Search Error: %@", error);
   }
}];

仅供参考 - 子类 AFHTTPClient 在此调用之前使用以下语句设置。子类化的 AFHTTPClient 客户端工作正常,并且 baseURL 设置正确。

[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];

在我的新手眼中,AFNetworking 处理 searchDict 的方式与 curl 语句中的文字不同。总而言之,在 AFNetworking 中实现的上述 curl 语句的等价物是什么?提前致谢

4

1 回答 1

0

在挖掘了更多之后,我能够通过以下方式使其工作:

  • 拉取最新版本的 AFNetworking (1.3.1)
  • 将我的 AFHTTPClient 子类的 initWithBaseURL 方法更改为以下代码
  • 将“AFJSONRequestOperation.h”导入我的 AFHTTPClient 子类
  • 使用 postPath:parameters:success:failure 方法命中 API

    [self setParameterEncoding:AFJSONParameterEncoding];
    [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
    [self setDefaultHeader:@"Accept" value:@"application/json"];
    

我无法理解为什么 curl 语句是 -XGET 而 AFNetworking 方法是 POST。肯定是我的误会。

于 2013-06-19T21:29:53.137 回答