Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 仅针对特定URL的AFNetworking响应错误_Ios_Objective C_Afnetworking - Fatal编程技术网

Ios 仅针对特定URL的AFNetworking响应错误

Ios 仅针对特定URL的AFNetworking响应错误,ios,objective-c,afnetworking,Ios,Objective C,Afnetworking,我正在尝试使用GeoNames API获得响应。这是我的密码 NSMutableDictionary * parameters = [[NSMutableDictionary alloc]initWithDictionary:params]; NSURL *baseURL = [NSURL URLWithString:@"http://api.geonames.org/findNearbyPostalCodesJSON"]; AFHTTPSessionManager *

我正在尝试使用GeoNames API获得响应。这是我的密码

  NSMutableDictionary * parameters = [[NSMutableDictionary alloc]initWithDictionary:params];

    NSURL *baseURL = [NSURL URLWithString:@"http://api.geonames.org/findNearbyPostalCodesJSON"];

    AFHTTPSessionManager * manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    [manager POST:@"" parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {

        [delegate didReceiveNearByLocationResponse:responseObject];

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);

    }];
我得到以下错误

Domain=com.alamofire.error.serialization.response code=-1011“请求失败:禁止(403)”UserInfo={NSUnderlyingError=0x7ff013d840f0{error Domain=com.alamofire.error.serialization.response code=-1016”请求失败:不可接受的内容类型:text/html“UserInfo={com.alamofire.serialization.error.response={URL:http://api.geonames.org/findNearbyPostalCodesJSON/ }

我试着用
hurl.it
来检查是否有反应。而且反应很好

令人惊讶的是,我在其他各种请求中使用了上述相同的代码,只是更改了URL,而且这些请求工作正常

已更新

之前它对下面的代码起作用。我做了一些代码质量调整,并将代码转移到上面。然后出现了问题

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

        NSDictionary *params = @{@"lat": lat,
                                 @"lng": lon,
                                 @"username" : @"testing"
                                 };
        [manager POST:@"http://api.geonames.org/findNearbyPostalCodesJSON" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
}
在浏览器中输入URL时,会得到以下JSON:

{"status":{"message":"Please add a username to each call in order for geonames to be able to identify the calling application and count the credits usage.","value":10}}
所以我怀疑,至少,你需要将你的“帖子”改为“获取”:

[manager GET:@"" parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
    [delegate didReceiveNearByLocationResponse:responseObject];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"%@",error);
}];
除此之外,根据返回的内容,您似乎需要一些附加的应用程序级逻辑来提供用户标识/身份验证,以便获得您感兴趣的实际数据,但上述更改至少应触发对成功块的调用。

“请求失败:不可接受的内容类型:文本/html”
因为AFNetworking只支持@“application/json”@“text/json”@“text/javascript”
您应该添加@“text/html”类型

[manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];




NSMutableDictionary * parameters = [[NSMutableDictionary alloc]initWithDictionary:params];

    NSURL *baseURL = [NSURL URLWithString:@"http://api.geonames.org/findNearbyPostalCodesJSON"];

    AFHTTPSessionManager * manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    //insert this code
    [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

    [manager POST:@"" parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {

        [delegate didReceiveNearByLocationResponse:responseObject];

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);

    }];

我找到了解决方案。我甚至将AFNetworking从2.X升级到了3.0

代码更改如下。特殊更改GET

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
manager.requestSerializer = [AFJSONRequestSerializer serializer];

[manager GET:@"http://api.geonames.org/findNearbyPostalCodesJSON" parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSLog(@"success!");
    [delegate didReceiveNearByLocationResponse:responseObject];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"error: %@", error);
}];
它不起作用。:(顺便说一句,我更新了这个问题。因为它以前工作得很好