美文网首页
GET和POST请求不到数据,但是代码都是对的

GET和POST请求不到数据,但是代码都是对的

作者: 简_爱SimpleLove | 来源:发表于2017-06-01 10:49 被阅读932次
    GET和POST请求不到数据

    在项目中遇到一个bug:

    1. 就是请求的参数和代码那些都是对的,和安卓的也比较了,但是安卓的可以请求到数据,但是我就是请求不到数据,而且不仅仅是GET,POST也请求不到。
    2. 但是用原来的老域名也可以请求成功,但是新域名就是请求不成功,后来经过很久的摸索和请教,终于找到问题所在。

    那就是和域名有关,所以就和AFNetworking有关,在AFSecurityPolicy类中加上self.validatesDomainName = YES;这么一句代码,即要对证书中的domain这一个字段进行校验。因为我们后台好像对域名做了一些操作,所以必须要加上这句代码才能请求到数据。

    详细了解可以看这篇文章 正确使用AFNetworking的SSL保证网络安全

    只是POST请求不到数据

    虽然前面的问题解决了,而后在项目中又遇到了一个非常诡异的bug,那就是我的POST请求总是不成功,而安卓的却可以,我们传的参数等等都是一样一样的,后来经过我换了各种POST请求方式,都不成功,确定代码没有问题。

    后来和后台,再和安卓多方面沟通,才知道安卓POST请求参数传的是josn格式的,而我传的参数是字典格式的,所以我们两个的格式不一样,后台的两个判断中,我传的那种格式的判断没有通过。所以当确定自己这边没有问题过后,一定要和后台那边多沟通进行解决,因为有的问题不是你一个人就能解决掉的。

    字典实质就是一对对key-value的键值对,一般的传到后台后,都统一转化为josn格式,老项目一般转化为XML格式,方便查询编程。

    另外当网络请求异常的时候,我们可以这样来进行分析:
    1、在AFURLSessionManager类里面的

    - (void)URLSession:(NSURLSession *)session
              dataTask:(NSURLSessionDataTask *)dataTask
        didReceiveData:(NSData *)data
    {
        //接受数据(网络原始数据)
    //    NSLog(@"网络原始数据:%s", [data bytes]);
        
        AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask];
        [delegate URLSession:session dataTask:dataTask didReceiveData:data];
    
        if (self.dataTaskDidReceiveData) {
            self.dataTaskDidReceiveData(session, dataTask, data);
        }
    }
    

    方法中打印网络的原始数据。

    2、如果没有收到数据,就往响应头那边查。

    3、 一般有数据的, 异常的话 要么url有问题,要么参数有问题,要么https有问题, 这三个没问题,基本上都会有数据, 响应头数据不标准,会在完成的时候做处理,即这个方法:

    - (void)URLSession:(__unused NSURLSession *)session
                  task:(NSURLSessionTask *)task
    didCompleteWithError:(NSError *)error
    

    4、关于HTTPS的方法:

    - (void)URLSession:(NSURLSession *)session
    didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
     completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
    

    5、关于响应头的方法,http会走这个方法,HTTPS只要查上面的方法就可以了

    - (void)URLSession:(NSURLSession *)session
              dataTask:(NSURLSessionDataTask *)dataTask
    didReceiveResponse:(NSURLResponse *)response
     completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler
    

    相关文章

      网友评论

          本文标题:GET和POST请求不到数据,但是代码都是对的

          本文链接:https://www.haomeiwen.com/subject/nlmsfxtx.html