gpt4 book ai didi

ios - 如何使用 AFNetworking-2.0 执行 JSON 编码的 GET 请求?

转载 作者:可可西里 更新时间:2023-11-01 05:54:48 25 4
gpt4 key购买 nike

我正在尝试使用类似 to this post which describes doing a PUT/POST for RESTful API 的模式, 但对于 GET。

我的原始代码看起来几乎一样,只是我使用了 GET: 关键字。我很快发现它不是发送 JSON 主体,而是对参数进行 url 编码。 AFJSONSerializer 类的文档中没有提到这一点。您必须转到父类(super class)文档 (AFHTTPSerializer) 并通读其属性,您会在其中找到 the one about HTTPMethodsEncodingParametersInURI .默认情况下,该集合由 HEAD、GET 和 DELETE 填充。那么对于那些类型的请求,JSON 序列化程序显然会恢复到其父类的行为?

所以我整理了以下代码:

AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES;
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet set];
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername: currentUser() password: currentPassword()];
[manager
GET: @"https://172.16.214.214:44321/trees"
parameters: [NSDictionary dictionary]
success:^(NSURLSessionDataTask* task, id responseObject){
NSLog(@"Response: %@", responseObject);}
failure:^(NSURLSessionDataTask* task, NSError* error){
NSLog(@"Error: %@", error);}];

设置 HTTPMethodsEncodingParametersInURI = [NSSet set] 的行旨在让我获得 JSON 编码的参数,就像我想要的 GET 一样。不幸的是,当我使用它并在我的错误控制台中得到以下信息时,我在服务器上看不到任何东西:

2013-12-10 10:11:14.149 myValve[957:60b] Error: Error Domain=NSURLErrorDomain Code=-1005 "The
network connection was lost." UserInfo=0x17e5d4b0
{NSErrorFailingURLStringKey=https://172.16.214.214:44321/trees,
NSErrorFailingURLKey=https://172.16.214.214:44321/trees, NSLocalizedDescription=The network
connection was lost., NSUnderlyingError=0x17e53240 "The network connection was lost."}

我还缺少什么?

最佳答案

AFNetworking 行为背后的基本原理可能在 Stack Overflow 问题中有最简洁的解释,HTTP GET with request body .其中一个答案 quotes Ray Fielding :

... In other words, any HTTP request message is allowed to contain a message body, and thus must parse messages with that in mind. Server semantics for GET, however, are restricted such that a body, if any, has no semantic meaning to the request. The requirements on parsing are separate from the requirements on method semantics.

So, yes, you can send a body with GET, and no, it is never useful to do so.

HTTP/1.1 specGET 定义为“检索由 Request-URI 标识的任何信息(以实体的形式)”并且不考虑将信息包含在请求的主体中。因此在技术上可能不会禁止在 GET 请求中使用正文,但充其量它是非标准的。 AFNetworking 选择不支持它并不完全令人惊讶。

因此,您可能不想将 JSON 放入 GET 请求的正文中。人们通常会将参数添加到 URL。如果您想在请求正文中发送 JSON,请执行 POST

关于ios - 如何使用 AFNetworking-2.0 执行 JSON 编码的 GET 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20502478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com