iOS 网络问题

来源:互联网 发布:在淘宝买手机是真品吗 编辑:程序博客网 时间:2024/05/16 00:35

iOS 网络问题  

    最近一直在独立负责一个项目,碰到了一些网络问题,之前一直是使用AFNetworking的,基本上所有的网络问题都能解决,刚好这个项目有几个接口使用的是不一致的请求方式,困扰了我好久。之前一直用AFN,原生的网络方法都忘光了。


   我碰到的这个问题是:同一个参数可传多个值,所以参数肯定不能用字典来传参,这个的话只能传一个值,比如有一个time参数,要求传入多个时间段,如果用字典的话:@{@“time” : @"09:00-12:00"},就只能传一个值,用数组的话,我们的后台也不能识别。


  后来我干脆参照AFN官网,把所有的方法都试了一遍  ,也还是不行。


URL Form Parameter Encoding

[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/Content-Type: application/x-www-form-urlencodedfoo=bar&baz[]=1&baz[]=2&baz[]=3
这样出来的NSURLRequest的HTTPBody 的 转换为NSString 是   09:00-12:00 14:00- 18:00 20:00-22:00

time%5B%5D=09%3A00-1200&time%5B%5D=14%3A00-18%3A00&time%5B%5D=20%3A00-22%3A00  格式服务器无法识别


后来我单独传了一个时间段 09:00-12:00 过去 ,发现NSURLRequest的HTTPBody 的 转换为NSString 是 

time=09%3A00-1200


看着两个HTTPBody, 我灵机一动, 自己写了个 


NSString *timeStr =@"time=07:00-10:00&time=14:00-17:00&time=21:00-22:00&time=22:10-22:20&time=22:30-23:00";

    NSData *timeData = [timeStrdataUsingEncoding:NSUTF8StringEncoding];

    request.HTTPBody = timeData;


然后就TM成功了!!!!! 这个方法我用的是官方的网络请求方法。  


完整代码如下:


NSString *URLStr = [NSStringstringWithFormat:@"%@/mobile/expert/time/setting",kBaseURL];

    

    /*

     NSDictionary *parameters = @{@"time" : @[@"09:00-1200", @"14:00-18:00", @"20:00-22:00"]};


      AFN 转换之后HTTPBody -> time%5B%5D=09%3A00-1200&time%5B%5D=14%3A00-18%3A00&time%5B%5D=20%3A00-22%3A00 格式服务器无法识别

     */

   // NSDictionary *parameters =@{@"time" :@[@"09:00-1200",@"14:00-18:00",@"20:00-22:00"]};

    

//AFN的方法

//    NSMutableURLRequest *realRequest = [[AFHTTPRequestSerializer serializer]requestWithMethod:@"POST" URLString:URLStr parameters:parameters error:nil];

    

    NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:[NSURLURLWithString:URLStr]];

    

    //头部参数 token

    NSString *token = [MCFunctionreadUserLoginInfo][@"token"];

    [request setValue:tokenforHTTPHeaderField:@"X-session-token"];

    request.HTTPMethod = @"POST";

//    NSData *data = realRequest.HTTPBody;

//    NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

//    MCLog(@"%@",str);

    


    NSString *timeStr =@"time=07:00-10:00&time=14:00-17:00&time=21:00-22:00&time=22:10-22:20&time=22:30-23:00";

    NSData *timeData = [timeStrdataUsingEncoding:NSUTF8StringEncoding];

    request.HTTPBody = timeData;

    

    NSOperationQueue *queue = [[NSOperationQueuealloc]init];

    [NSURLConnectionsendAsynchronousRequest:request

                                       queue:queue

                           completionHandler:^(NSURLResponse *response,NSData *data,NSError *error){

                               if (error) {

                                   NSLog(@"Httperror:%@%ld", error.localizedDescription,(long)error.code);

                               }else{

                                   

                                   NSInteger responseCode = [(NSHTTPURLResponse *)responsestatusCode];

                                   

                                   NSString *responseString = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];

                                   

                                   NSLog(@"HttpResponseCode:%ld", (long)responseCode);

                                   NSLog(@"HttpResponseBody %@",responseString);

                               }

 }];



上班时间匆匆写的,格式不好,将就将就哈。


1 0