2015-11-20 82 views
0

在发布JSON参数https://api.hackerearth.com/codemonk/v1/topic­detail/时,我收到404错误。服务器使用POST HTTP方法获取topic的详细信息& JSON响应预计成功。 POST参数是topic对象的id。预计POST参数使用JSON。 我使用AFNetworking如下 -iOS使用JSON参数从AFNetworking HTTP POST方法获取JSON响应

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

NSDictionary *params = [NSDictionary dictionaryWithObject:@1 forKey:@"id"]; 

NSString *str = @"https://api.hackerearth.com/codemonk/v1/topic­-detail/"; 

NSString *encodedStr = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

[manager POST:encodedStr 
    parameters:params 
     success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { 

    NSLog(@"responseObject : %@",responseObject); 


} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { 

    NSLog(@"error : %@", error.localizedDescription); 

}]; 

这是有规律的东西,但不知道为什么,我似乎无法得到它正确的现在。我只收到404 Page Not Found错误。这当然不是服务器端问题。任何帮助家伙?

+0

您设定值id 1,这意味着连杆; https://api.hackerearth.com/codemonk/v1/topic-detail/id=1 而这个链接给予404.我错过了什么? –

+0

这是一个POST请求,我需要将{“id”:1}作为json参数主体传递给此请求。 – ystack

+0

发送带有json字典的POST请求作为正文提供的字典也会导致404错误。你能提供文件吗?也许API期望一些标题 –

回答

1

也许这会有所帮助。

AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer]; 

[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

operationManagerInstance.requestSerializer = requestSerializer; 

============= UPDATE

我有404复制您的网址时。这是因为主题 - 细节之间的连字符实际上并不是连字符。这是一些不起作用的特殊字符。

https://api.hackerearth.com/codemonk/v1/topic -detail/

相反,我删除了它,并手动键入连字符和它工作正常。

+0

已经尝试了这个明确的JSON设置,再次尝试它,但仍然得到一个'404'错误 – ystack

+0

上帝的甜蜜的爱,是的 这是它,连字符是罪魁祸首 - 这就是为什么没有任何POST请求不工作(所有人都有连字符) 谢谢你的伴侣:) – ystack

+0

你的问题使我的一天!它比仅在POST请求正文中发送JSON更加有趣:) –

1

删除以下行

NSString *encodedStr = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

尝试以下方法:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

NSDictionary *params = [NSDictionary dictionaryWithObject:@1 forKey:@"id"]; 

NSString *str = @"https://api.hackerearth.com/codemonk/v1/topic­-detail/"; 

[manager POST:str 
    parameters:params 
     success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { 

    NSLog(@"responseObject : %@",responseObject); 


} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { 

    NSLog(@"error : %@", error.localizedDescription); 

}];