AFNetworking post请求遇到问题解决过程
今天用AFNetworking向服务器端发送post请求来获取数据终于成功了,废话不多说,直接讲过程。
刚开始的时候总是报404错误,
failure -- error = Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: not found (404)" UserInfo=0x7fb471f18110 {NSLocalizedDescription=Request failed: not found (404), NSErrorFailingURLKey=http://114.85.246.110:11111/IAppService/InsertPurchaseRemainPa, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x7fb471f7d300> { URL: http://114.85.246.110:11111/IAppService/InsertPurchaseRemainPa } { status code: 404, headers {
"Content-Length" = 1565;
"Content-Type" = "text/html; charset=UTF-8";
Date = "Wed, 22 Apr 2015 06:53:07 GMT";
Server = "Microsoft-HTTPAPI/2.0";
} }, NSUnderlyingError=0x7fb471f06ab0 "Request failed: unacceptable content-type: text/html"}
网页上显示“未找到终结点”,然后我在网上百度了好多种解决方法,比如
1.看看是用http还是json
manager.responseSerializer = [AFJSONResponseSerializer serializer];
2.text/html 那个去掉看看报什么错,有时候这句不一定需要。
3.params有没有问题,有没有映射错误。
具体看接口的要求,用get还是post,什么类型的数据,传什么参。我就是一个个试验出来的。
以上是网上某位大神说的解决方法,可以一试,基本上就差不多,可我的问题就是特别,就tmd是服务器那边的问题,怎么试都不管用,所以有问题的时候不要自己一个人在那瞎试,要让服务器那边最好也试试,最好是他那能测试成功了你在改你自己的,一定要确认他给你的什么都是对的要不然坑死你。
上面的404错误就是访问不了服务器,服务器弄好了,接口地址也确认了呢就能访问了不会出现404错误了。
然后呢又出现了新的错误,先贴代码:
NSString *urlstr2 = @"http://114.85.246.110:11111/IAppService/InsertPurchaseRemainPay";
//[urlstr2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic2 = @{@"ShopID":@"802BB63B-7DBE-496D-BCB5-3F3F00848FFC",@"Balance":@10,@"Rebate":@0,@"BankAccountID":@"08F2A9BB-F318-4BE0-A4A5-33C0125FF137",@"BankTradeNo":@"",@"OrderPayID":@"00000000-0000-0000-0000-000000000000",@"PaidSum":@15,@"PurchaseID":@"5A720BCF-C301-4A1D-AD37-24F04C8A6F5D",@"State":@0};
NSLog(@"%@",dic2);
//print out the data contents
NSString *str2 = [dic3 JSONString];
NSLog(@"strrrr=====%@",str2);
AFHTTPRequestOperationManager *manager1 = [AFHTTPRequestOperationManager manager];
manager1.requestSerializer = [AFJSONRequestSerializer serializer];
manager1.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager1 POST:urlstr2 parameters:str2 success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"success -- %@",operation.responseString);
NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"success -- str = %@ ",str);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"failure -- %@",operation.responseString);
NSLog(@"failure -- error = %@",error);
}];
上面dic是服务器给的参数模型,也就是个字典,他说要转换成json传给他,我傻,不知道字典就tmd是json数据还字费劲把字典给转成了json字符串传给他,就这样参数老不对,他那边要的就是一个字典模型,所以直接传给他一个字典就行了,但是上面得加上 manager1.requestSerializer = [AFJSONRequestSerializer serializer];这一句话进行配置,发送的时json请求,大意就是这样吧,具体的自行百度。
然后呢,接口地址确认对了,参数也传对了,就差返回类型了,AFHTTPResponseSerializer这个东西是要求你对返回的数据自己进行解析,想怎么解析就怎么解析,AFJSONResponseSerializer,而这个呢是af这个库替你解析返回的json数据,所以block里面再写 NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];这句就会崩,因为解析过后的responseObject就是一个数组,你直接返回responseObject就行了。
最后代码精简为:
NSString *urlstr2 = @"http://114.85.246.110:11111/IAppService/InsertPurchaseRemainPay";
NSDictionary *dic2 = @{@"ShopID":@"802BB63B-7DBE-496D-BCB5-3F3F00848FFC",@"Balance":@10,@"Rebate":@0,@"BankAccountID":@"08F2A9BB-F318-4BE0-A4A5-33C0125FF137",@"BankTradeNo":@"",@"OrderPayID":@"00000000-0000-0000-0000-000000000000",@"PaidSum":@15,@"PurchaseID":@"5A720BCF-C301-4A1D-AD37-24F04C8A6F5D",@"State":@0};
NSLog(@"%@",dic2);
AFHTTPRequestOperationManager *manager1 = [AFHTTPRequestOperationManager manager];
manager1.requestSerializer = [AFJSONRequestSerializer serializer];
manager1.responseSerializer = [AFJSONResponseSerializer serializer];
[manager1 POST:urlstr2 parameters:dic2 success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"success -- %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"failure -- error = %@",error);
}];
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。