2016-03-01 96 views
1

林试图从使用GeoNames的API响应。这里我的代码AFNetworking响应错误特定URL

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 "Request failed: forbidden (403)" UserInfo={NSUnderlyingError=0x7ff013d840f0 {Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7ff013d07440> { URL: http://api.geonames.org/findNearbyPostalCodesJSON/ }

我试图与hurl.it检查响应是否来不来。它的未来很好。

惊喜的是使用相同的上述代码只改变URL和那些工作正常各种其他请求IM。

修订

而且以前它为下面的代码。我做了一些代码质量调整,并将代码转移到上面。然后有问题

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) { 
} 

回答

1

我找到了解决方案。我甚至将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); 
}]; 
1

当我刚进入网址http://api.geonames.org/findNearbyPostalCodesJSON到浏览器中,我得到以下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}} 

所以我怀疑的是,在最起码,你需要改变你的“POST”到“GET”:

[manager GET:@"" parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { 
    [delegate didReceiveNearByLocationResponse:responseObject]; 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    NSLog(@"%@",error); 
}]; 

除此之外,根据返回的内容,它看起来像你需要一些额外的应用程序级的逻辑,以提供用户识别/认证为了获得你感兴趣的实际数据,但上面的改变至少应该触发成功块的调用。

+0

它没有工作。 :(顺便说一句,我更新了更多的问题,因为它工作良好之前 –

0

“请求失败:无法接受的内容类型:text/html的”
因为AFNetworking只支持@ “应用程序/ JSON”,@ “文/ JSON”,@ “文/ 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); 

    }]; 
+0

我试过了。 –