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);

    }];

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。