【问题标题】:AFNetworking Request failed: unacceptable content-type: text/htmlAFNetworking 请求失败:不可接受的内容类型:text/html
【发布时间】:2015-02-12 17:19:31
【问题描述】:

我正在尝试向服务器发送 POST 请求,但仍然没有成功。请帮我找出不正确的地方。

共享实例初始化:

- (id)init{
self = [self initWithBaseURL:[NSURL URLWithString:kBaseURL]];
if(self) {
    self.
    self.responseSerializer = [AFJSONResponseSerializer serializer];
    [self.requestSerializer setAuthorizationHeaderFieldWithUsername:@"user" password:@"password"];
    parsingQueue = dispatch_queue_create("com.company.queue.parser",NULL);
}
return self;

发布方法主体:

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:[FSApplicationManager sharedInstance].userToken, @"user_token", nil];
[params setObject:[NSNumber numberWithDouble:userId] forKey:@"user_id"];
[params setObject:[NSNumber numberWithDouble:filmId] forKey:@"film_id"];
[params setObject:[NSNumber numberWithBool:NO] forKey:@"sendCopy"];

if([subject length]>0){
    [params setObject:subject forKey:@"subject"];
}
[params setObject:message forKey:@"message"];

NSString *URLString = [NSString stringWithFormat:@"%@%@", kBaseURL, kAPISendMessageToUser];

NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"POST"
                                                               URLString:URLString
                                                              parameters:params
                                                                   error:nil];

[request addValue:[self signatureWithURL:[request.URL absoluteString] requestBody:[[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]] forHTTPHeaderField:@"X-SERVAPI-Signature"];
[request addValue:pub forHTTPHeaderField:@"X-SERVAPI-PublicKey"];

AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id response){
    NSLog(@"%@", response);

} failure:^(AFHTTPRequestOperation *operation,  NSError *error){
    NSLog(@"%@, \n response %@", error, operation.responseObject);
}];

[self.operationQueue addOperation:operation];

return operation;

我得到的错误:

错误域=AFNetworkingErrorDomain 代码=-1011 “请求失败: 内部服务器错误 (500)" UserInfo=0xcf0c2f0 {NSErrorFailingURLKey=https://ppd.someserver.com/api/user/send-message, NSLocalizedDescription=请求失败:内部服务器错误 (500), NSUnderlyingError=0xcf06ce0 "请求失败:不可接受 内容类型:文本/html", AFNetworkingOperationFailingURLResponseErrorKey= { URL:https://ppd.someserver.com/api/user/send-message } { 状态码:500,标题 { 连接=关闭; “内容编码”= gzip; “内容长度”= 1412; “内容类型”=“文本/html;字符集=UTF-8”; 日期 =“2014 年 12 月 14 日星期日 13:46:57 GMT”; P3P = "CP=\"NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM\""; 服务器=阿帕奇; Vary = "接受编码"; "X-Powered-By" = "PHP/5.3.3-7+squeeze19"; } }},

我试图联系负责服务器的人,这就是我得到的:

无需将内容类型添加到您的请求中,但如果您 希望这样做,因为您使用的是 POST 方法,您应该使用: Content-Type: application/x-www-form-urlencoded;

【问题讨论】:

  • 顺便说一句,我认为这是在 AFHTTPRequestOperationManager 子类中?我认为 init 中的语法错误是您试图删除的内容,因为它与手头的问题无关?

标签: ios objective-c afnetworking afnetworking-2


【解决方案1】:

问题在于服务器正在向您发送 HTML 编码的答案。 您可以执行以下 2 个选项之一:

  1. 与服务器端人员交谈,将其编码为 json。

  2. 尝试通过执行以下操作自行修复它:设置完 self.responseSerializer 后放入以下行:

    self.operationManager.responseSerializer.acceptableContentTypes = [self.operationManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

这一行将“text/html”添加到可接受的类型中。提供该服务器的响应仍然是可序列化的 - 你应该没问题。

【讨论】:

    【解决方案2】:

    您正在收到 HTML 响应。要诊断发生了什么,查看 HTML 实际显示的内容很有用。

    暂时将响应序列化程序更改为AFHTTPResponseSerializer,然后检查 HTML 响应,它可能会提供一些信息,帮助您了解请求的问题所在。或者您可以不理会代码并使用Charles 或其他类似工具观察交流。但我们的目标是了解为什么您的状态码为 500,而 HTML 可能会为您提供一些线索。

    关于为什么请求不起作用,我们很难说没有看到 API。请求中键名样式的混合是可疑的(有些是下划线,有些是驼峰式),但我们不知道 API,所以不清楚这是否有问题。

    关于Content-Type,AFNetworking 会为你做这件事(并且会使用application/x-www-form-urlencoded,所以我认为这不是问题。

    如果 API 支持团队不熟悉 Objective-C/AFNetworking 代码示例,您可能需要使用 Charles 或类似工具来观察请求。然后捕获发送的原始请求,也许 API 支持团队可以更好地诊断问题,而不会分散 Objective-C/AFNetworking 代码的注意力。

    【讨论】:

    • 我这边的一切都是正确的。他们返回的是整个 html 页面而不是 json 响应,解析器对此有问题。顺便说一句,检查响应是什么的最简单方法是打印出 [operation responseString]。
    猜你喜欢
    • 2013-10-07
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2018-05-11
    相关资源
    最近更新 更多