nin*_*iOS 4 objective-c ios afnetworking afnetworking-2
我正在尝试向服务器发送POST请求,但我仍然没有这样做.请帮我解决不正确的问题.
共享实例init:
- (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;
Run Code Online (Sandbox Code Playgroud)
帖子方法体:
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;
Run Code Online (Sandbox Code Playgroud)
错误我得到:
错误域= AFNetworkingErrorDomain代码= -1011"请求失败:内部服务器错误(500)"UserInfo = 0xcf0c2f0 {NSErrorFailingURLKey = https://ppd.someserver.com/api/user/send-message,NSLocalizedDescription =请求失败:内部服务器error(500),NSUnderlyingError = 0xcf06ce0"请求失败:不可接受的内容类型:text/html",AFNetworkingOperationFailingURLResponseErrorKey = {URL:https ://ppd.someserver.com/api/user/send-message } {status code:500 ,标题{Connection = close; "Content-Encoding"= gzip; "内容长度"= 1412; "Content-Type"="text/html; charset = UTF-8"; 日期="太阳报,2014年12月14日13:46:57 GMT"; P3P ="CP = \"NOI ADM DEV PSAi COM NAV OURo STP IND DEM \""; 服务器= Apache; Vary ="Accept-Encoding"; "X-Powered-By"="PHP/5.3.3-7 + squeeze19"; },},
我试图联系负责服务器的人,这就是我得到的:
没有必要在您的请求中添加内容类型,但如果您希望这样做,因为您使用的是POST方法,您应该使用:Content-Type:application/x-www-form-urlencoded;
问题是服务器正在向您发送HTML编码的答案.您可以执行以下两个选项之一:
与服务器端人员交谈,将其编码为json.
通过执行以下操作尝试自行修复:设置self.responseSerializer后,将此行放入:
self.operationManager.responseSerializer.acceptableContentTypes = [self.operationManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
此行将"text/html"添加到可接受的类型中.提供服务器的响应仍然是可序列化的 - 你应该没问题.
您正在接收HTML响应.要诊断正在发生的事情,查看HTML实际说明的内容很有用.
暂时将响应序列化程序更改为AFHTTPResponseSerializer然后检查HTML响应,它可能会提供一些信息,以便您了解该请求的错误.或者您可以单独留下代码并观察与Charles或其他类似工具的交换.但目标是了解为什么你的状态代码为500,HTML a 可能会给你一些线索.
关于为什么请求不起作用,我们很难说没有看到API.请求中关键名称样式的混合是可疑的(在某些情况下是下划线,在其他情况下是camelCase),但我们不知道API,因此不清楚这是否是一个问题.
关于Content-Type,AFNetworking将为你做这件事(并将使用application/x-www-form-urlencoded,所以我不认为这是问题.
如果API支持团队不熟悉Objective-C/AFNetworking代码示例,您可能希望使用诸如Charles之类的工具来观察请求.然后捕获发送的原始请求,并且API支持团队可以更好地诊断问题,而不会分散Objective-C/AFNetworking代码.
| 归档时间: |
|
| 查看次数: |
16883 次 |
| 最近记录: |