我遵循了建议的解决方案AFNetworking 2.0 向 GET 请求添加标头 https://stackoverflow.com/questions/19466291/afnetworking-2-0-add-headers-to-get-request使用以下代码片段为请求指定自定义标头:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:someID forHTTPHeaderField:@"some_id"];
NSDictionary *parameters = @{@"id": user.id, @"birthday": user.birthday};
[manager POST:[NSString stringWithFormat:@"%@/user_create",BaseURLString] parameters:parameters
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
if (responseObject[@"error"])
{
NSLog(@"REST User Create Response Error: %@", responseObject[@"error"]);
}
else
{
[self saveUserDetails:responseObject];
}
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"REST User Create Error: %@", error);
}];
但是,当执行此操作时,我在 API 的响应中收到错误,指出我的所有参数都丢失了。同样的代码块以前可以工作(没有设置自定义标头并且 API 最初不需要它们)。
有谁知道如何正确设置自定义标头和 POST 参数?
谢谢,
尼诺
你的代码对我来说看起来不错。
有几点值得尝试:
- 尝试使用AF网络活动记录器 https://github.com/AFNetworking/AFNetworkActivityLogger查看实际发送的内容(将其设置为
AFLoggerLevelDebug
.)您还可以使用网络代理,例如Charles http://www.charlesproxy.com/或者像这样的协议分析器Wireshark http://www.wireshark.org/.
-
如果确定数据未正确发送,请在以下位置设置断点[AFURLRequestSerialization -requestBySerializingRequest:withParameters:error:]
。这是将 HTTP 标头和参数添加到 URL 请求的位置。该方法非常简单;您应该能够逐步执行并观察内容被添加到请求中并确定其被跳过的原因。
NOTE:AFURLRequestSerialization.m 包含 AFURLRequestSerialization 的多个子类。在超级实现以及 AFJSONRequestSerializer 实现中设置断点。
可能导致此行为的示例:
-
parameters
is nil
.
- you've added
POST
to HTTPMethodsEncodingParametersInURI
but
- 您的 API 未准备好处理 POST 请求中附加到 URL 的参数,或者
- the
queryStringSerialization
块是nil
AND queryStringSerializationStyle
设置为除AFHTTPRequestQueryStringDefaultStyle
.
- NSJSONSerialization 无法处理你的
parameters
字典
附注(与您的问题无关),如果您使用 AFHTTPRequestOperationManagerinitWithBaseURL:
方法,并向您的经理保留强有力的参考,您不必这样做[NSString -stringWithFormat:
] 来构建你的 URL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)