ios xml格式的数据请求以及解析

最近有个项目任务: 在容联云通讯demo的基础上添加<开始录制>以及<结束录制>的按钮,分别有两个请求,但是这两个请求是xml格式的


image.png

1.请求体格式是xml

image.png

2.响应包体既数据返回也是xml格式类型

image.png

实现xml请求有两种方法:

1.苹果原生请求方式

2.AFNetWorking请求

苹果原生请求方式

点击按钮发送请求

//容联云封装的方法  其实点击按钮直接请求即可
- (void)PostUrlXml:(NSString *)url xmlString:(NSString *) xmlString parameters:(id)info completion:(ECRequestCompletion)completion failure:(void (^)(NSURLSessionDataTask *task, NSError *))failure{
    
//该url是 https://imapp.yuntongxun.com:443/2013-12-26/Application/8a216da86058d6fa0160733a80240a8a/call/transmission?sig=8AD46BB8229C4E3CC3A7F003FDD62078&type=2&mode=2&sign=1
//我直接将参数 添加到url后了
//sig=8AD46BB8229C4E3CC3A7F003FDD62078&type=2&mode=2&sign=1
    NSURL *URL = [NSURL URLWithString:url];
//xmlString 我以nsstring的形式写过来
//[NSString stringWithFormat:@"",self.meetingRoomNum];
    NSString *xmlStr = xmlString;
//将其转化为data类型 目的是设置请求体 因为在苹果原生方法中HTTPBody是NSData类型
//   NSData *HTTPBody;
    NSData *postData = [xmlStr dataUsingEncoding:NSUTF8StringEncoding];

//******NSMutableURLRequest是NSURLRequest的子类,常用方法有 (需求需要包头包体设置参数内容)
//1、设置请求超时等待时间(超过这个时间就算超时,请求失败)
//- (void)setTimeoutInterval:(NSTimeInterval)seconds;
//2、设置请求方法(比如GET和POST)
//- (void)setHTTPMethod:(NSString*)method;
//3、设置请求体
//- (void)setHTTPBody:(NSData*)data;
//4、设置请求头
//- (void)setValue:(NSString*)value forHTTPHeaderField:(NSString*)field;

//---post请求一般都是采用NSMutableURLRequest 进行网络请求,因为post请求一般包括 body 参数 或者 head。---/
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
//设置请求头
    [request setValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"application/xml" forHTTPHeaderField:@"Accept"];
    NSString *timerStr = [NSString sigTime:[NSDate date]];
    NSString *authorBase64 = [NSString stringWithFormat:@"%@:%@", ECSDK_Key,timerStr];
    authorBase64 = [[authorBase64 dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    [request setValue:authorBase64 forHTTPHeaderField:@"Authorization"];
//设置请求方法
    [request setHTTPMethod:@"POST"];
//设置请求体
    [request setHTTPBody:postData];
    
---使用NSURLSession,拢共分两步:

    第一步 通过NSURLSession的实例创建task
    第二部 执行task


//关于NSURLSession的初始化使用  
//[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc]init]];
//(百度很久看到一种解释:苹果倡导使用https,且该接口也是https请求,如果后端使用私有的证书,会出现很多问题
//,比如证书过期啊、不受信任等,这样我们不管是调用接口还是打开网页,都会失败 
//出处参考:http://blog.csdn.net/u012138272/article/details/76714099)
//关于NSURLSession相关  查看下面地址
//https://www.jianshu.com/p/fafc67475c73
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc]init]];
//如果使用上面初始化  其实可以用NSURLSessionTaskDelegate代理方法,如果想要在接收数据过程中做进一步的处理
// (因为要使用代理方法,就不需要block方式的初始化了,我没用代理方法是因为懒懒懒- -!)
//可以这样操作:NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];


//摘抄一些代理方法
// 1.接收到服务器的响应
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
    // 允许处理服务器的响应,才会继续接收服务器返回的数据
completionHandler(NSURLSessionResponseAllow);
}
// 2.接收到服务器的数据(可能调用多次)
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    // 处理每次接收的数据
}

// 3.请求成功或者失败(如果失败,error有值)- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    // 请求完成,成功或者失败的处理
}



//NSURLSessionTask可以简单理解为任务:如数据请求任务,下载任务,上传任务等(这里请求任务且带block的回调方法)

    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) 
//-----------------分割线(至此xml请求已经完成,除了最最最后一步[task resume];)------------------------
//之后是关于解析xml格式的返回内容:
         if (error) {
             NSLog(@"有错误error:%@",error);
         } else {
//将返回的数据data  用字符串的形式打印出来
             NSLog(@"data数据:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
            
             NSXMLParser *parseer = [[NSXMLParser alloc] initWithData:data];
             parseer.delegate = self;
             [parseer parse];

         }
    }];

    //Tips:
   // 所有类型的task都要调用resume方法才会开始进行请求.
    [task resume];
}

tips:

你可能感兴趣的:(ios xml格式的数据请求以及解析)