最近有个项目任务: 在容联云通讯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:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Request><ConfVideoRecord confid=\"%@\"/></Request>",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]; }
作者:择一城终老_蜗牛
链接:https://www.jianshu.com/p/6f881934946e
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦