AFNetworking相当于curl语句

时间:2013-06-19 21:04:12

标签: objective-c curl nsdictionary elasticsearch afnetworking

我尝试使用AFNetworking查询elasticsearch(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);
   }
}];

FYI - 在此调用之前,使用以下语句设置子类AFHTTPClient。子类AFHTTPClient客户端正常工作,并且正确设置了baseURL。

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

对于我的新手来说,看起来AFNetworking处理searchDict与curl语句中的文字不同。总结一下,在AFNetworking中实现的上述curl语句的等价物是什么?提前致谢

1 个答案:

答案 0 :(得分: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,这超出了我的意义。当然是我的误解。