iOS 从带有 JSON 参数的 AFNetworking HTTP POST 方法获取 JSON 响应
Posted
技术标签:
【中文标题】iOS 从带有 JSON 参数的 AFNetworking HTTP POST 方法获取 JSON 响应【英文标题】:iOS Get JSON response from AFNetworking HTTP POST method with JSON parameters 【发布时间】:2015-11-20 13:11:40 【问题描述】:我在https://api.hackerearth.com/codemonk/v1/topicdetail/
上使用 JSON 参数发布时收到404
错误。服务器使用 POST HTTP 方法来获取topic
的详细信息,成功时会收到 JSON 响应。 POST 参数是topic
对象的id
。 POST 参数应采用 JSON 格式。
我正在使用 AFNetworking 如下 -
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
错误。这肯定不是服务器端问题。有帮助吗?
【问题讨论】:
您设置了 id 值 1 表示该链接; api.hackerearth.com/codemonk/v1/topic-detail/id=1 这个链接给出 404。我错过了什么吗? 这是一个 POST 请求,我需要将 "id":1 作为 json 参数体传递给这个 post 请求。 使用您作为正文提供的 json dict 发送 POST 请求也会产生 404 错误。你能提供文件吗?也许 API 需要一些头文件 您确定您使用的链接正确吗?这似乎是一个服务器端问题。我试图用邮递员运行你的请求,它也给出了相同的结果。 该文档非常标准,这是它的链接:bit.ly/1jb9fLb 【参考方案1】:也许这会有所帮助。
AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
operationManagerInstance.requestSerializer = requestSerializer;
=============更新
复制您的网址时出现 404。这是因为主题细节之间的连字符实际上不是连字符。这是一些不起作用的特殊字符。
https://api.hackerearth.com/codemonk/v1/topic-detail/
相反,我删除了它并手动输入连字符,它工作正常。
【讨论】:
曾尝试过这个显式的 json 设置,再次尝试,但仍然收到404
错误
为了上帝的甜蜜之爱,是的,就是这样,连字符是罪魁祸首——这就是为什么没有一个 POST 请求不起作用的原因(所有这些请求都有连字符)谢谢一个吨队友:)
你的问题让我很开心!这比在 POST 请求正文中发送 JSON 更有趣:)【参考方案2】:
删除下面一行
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);
];
【讨论】:
以上是关于iOS 从带有 JSON 参数的 AFNetworking HTTP POST 方法获取 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章
iOS,AFNetworking - 带有 JSON 响应的“清除”NSSTring [关闭]
Android + iOS - 从带有指定参数的 WWW 链接安装 + 运行/运行应用程序
JAVA接口传递参数(POST),从接口接收数据(JSON) -----记录