用携程机票为例: 携程联盟 飞机票、门票 联盟ID:278639 站点ID:739462 密钥KEY:BE57B925-E8CE-4AA2-AC8E-3EE4BBBB686F API_URL:openapi.ctrip.com http://open.ctrip.com/InlandFlight/OTA_FlightSearch.aspx

1.首先在使用携程api的时候你需要明白什么是soap?

SOAP(SimpleObjectaccessPRotocal,简单对象访问协议)技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问。SOAP是把成熟的基于HTTP的WEB技术与xml的灵活性和可扩展性组合在了一起。

2.作为ios开发者,当我们请求时需要xml格式的请求体就比较蛋疼了。今天带大家先简单看看soap,简单对象访问协议,或者叫做简单交换协议。我的理解就是我们在请求的时候发一个请求,这个请求带上xml格式请求体。然后呢,服务器在接受到我们xml请求体后,返回给我们一个xml结果。然后我们开始解析。就是这样的一个请求的过程。

3.那么有些同学可能会问了,怎么封装xml请求体呢?

NSString *soapBody =  [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"

"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"

"<soap:Body>"

//------下面是xml-----//

"<Request>"

"<Header AllianceID=\"278639\" SID=\"739462\" TimeStamp=\"1450326295\" Signature=\"4639A23E98A9141EFFC639F483828C3C\" RequestType=\"OTA_FlightSearch\" AsyncRequest=\"false\" Timeout=\"0\" MessagePriority=\"3\"/>"

"<HotelRequest>"

"<RequestBody xmlns:ns=\"http://www.opentravel.org/OTA/2003/05\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"

"<FlightSearchRequest>"

"<SearchType>%@</SearchType>"

"<Routes>"

"<FlightRoute>"

"<DepartCity>%@</DepartCity>"

"<ArriveCity>%@</ArriveCity>"

"<DepartDate>%@</DepartDate>"

"</FlightRoute>"

"</Routes>"

"<PriceTypeOptions>"

"</PriceTypeOptions>"

"<ProductTypeOptions>Normal</ProductTypeOptions>"

"<Classgrade>%@</Classgrade>"

"</FlightSearchRequest>"

"</RequestBody>"

"</HotelRequest>"

"</Request>"

//-----以上部分是xml-------//

"</soap:Body>"

"</soap:Envelope>",SearchType,DepartCity,ArriveCity,DepartDate,Classgrade];

4.那怎样post给服务器呢?

我们平常所说的xml请求体就是一个data,NSData,首先我们需要将字符串转换成为data,然后post给服务器。这样服务器在收到请求后就会回应我们。

//API_URL,接口地址

NSURL *url = [NSURL URLWithString:@"http://openapi.ctrip.com/Flight/DomesticFlight/OTA_FlightSearch.asmx"];

NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];

NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapBody length]];

[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

[request addValue: @"http://ctrip.com/Request" forHTTPHeaderField:@"SOAPAction"];

[request addValue: msgLength forHTTPHeaderField:@"Content-Length"];

[request setHTTPMethod:@"POST"];

[request setHTTPBody:[soapBody dataUsingEncoding:NSUTF8StringEncoding]];

NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];

if (connection) {

NSLog(@"机票查询成功了");

}    [connection start];

//5.设置代理<NSURLConnectionDelegate>,实现代理

/**

*  请求成功后返回的data

*

*  @param connection connection

*  @param data       数据

*/

- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data{

NSLog(@"%@",data);

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

NSLog(@"=== %@", strPartData);

[self.strReceivedData appendString:strPartData];

}

6.开始解析,#import "GDataXMLNode.h"

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

NSLog(@"%@ connectionDidFinish.\n",self);

//通过字符串内容创建,GDataXMLDocument实例

NSError*error = nil;

GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithXMLString:self.strReceivedData options:0 error:&error];

if(error)

{

NSLog(@"Create GDataXMLDocument error,error code: %@",[error localizedDescription]);

return;

}

//首先查找到根元素

GDataXMLElement *rootElement = [doc rootElement];

//在根元素里面查找所有NAME为“Student"的子元素

}

SOAP-XML请求(iOS应用下集成携程api)的更多相关文章

  1. 最简单易懂的webService客户端之soap+xml请求

    代码准备: 1.网络上有提供一些免费的服务器测试地址,可以上这里找一找:https://my.oschina.net/CraneHe/blog/183471 2.我选择了一个翻译地址:http://w ...

  2. unity3d导出到IOS程序下 集成unity3dAR功能

    转载自: 来自AR学院(www.arvrschool.com),原文地址为:http://www.arvrschool.com/index.php?c=post&a=modify&ti ...

  3. app结合unity3D程序中遇到的问题 MapFileParser unity3d导出到IOS程序下 集成unity3dAR功能

    转载自: 来自AR学院(www.arvrschool.com),原文地址为:http://www.arvrschool.com/index.php?c=post&a=modify&ti ...

  4. [转] 携程App网络服务通道治理和性能优化@2016

    App网络服务的高可靠和低延迟对于无线业务稳定发展至关重要,过去两年来我们一直在持续优化App网络服务的性能,到今年Q2结束时基本完成了App网络服务通道治理和性能优化的阶段性目标,特此撰文总结其中的 ...

  5. 李洪强iOS开发支付集成之微信支付

    iOS开发支付集成之微信支付 微信支付也是需要签名的,也跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解). 1 - 集成前首先要看看文档 开 ...

  6. iOS现有工程 集成 Cordova/Ionic

    首先, 新建 Cordova 项目就不说了, 步骤: http://ionicframework.com/getting-started/ , cordova生成的项目用cdv_project称呼, ...

  7. 携程apollo系列-客户端集成

    本文讲解如何在 Java 程序中集成 Apollo 配置, 主要涉及到一些基础用法. 对于一些高级用法, 比如如何加密/解密配置项 (可用于数据库密码配置), 如何动态切换数据源地址,如何动态切换日志 ...

  8. [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想)

    2018年01月03日阅读 2472   [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想) LYEmptyView 此框架是本人在5,6个月前,公司启动新项目的时候, ...

  9. 《疯狂iOS讲义(下)——iPhone/iPad高级应用与手游开发(含CD光盘1张)》

    <疯狂iOS讲义(下)——iPhone/iPad高级应用与手游开发(含CD光盘1张)> 基本信息 作者: 李刚    肖文吉 出版社:电子工业出版社 ISBN:9787121224379 ...

随机推荐

  1. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q69-Q71)

    Question 69 You are designing an extranet site using SharePoint 2010. This site must allow employees ...

  2. Android自定义ScrollView分段加载大文本数据到TextView

    以下内容为原创,转载时请注明链接地址:http://www.cnblogs.com/tiantianbyconan/p/3311658.html 这是我现在碰到的一个问题,如果需要在TextView中 ...

  3. AndRoid studio创建APP图标

    打开---File----New----Image asset 注意:在design页面可能没有image asset选项!必须在其他编辑页面! 这就打开了图标设置页面,找到自己想要的图标就好!下面框 ...

  4. swift 2.2 语法 (中)

    前言: 1.此文中的语法会根据Swift的升级变动而更新. 2.如果需要请移步 -> swift2.2 语法(上).swift 2.2语法(下) 函数 和C语言一样,swift也有函数,性质和我 ...

  5. eclipse编码格式设置

    大家好,我是小Alan,很高兴大家能够看到这篇小小的技术点文章,这还是从参加工作以来,小Alan写的第一篇博文.喜欢能够给一些朋友带来方便. 说到eclipse编码格式的设置其实一个非常非常小的事情, ...

  6. yii2增加验证码详细步骤

    作者:白狼 出处:http://www.manks.top/article/yii2_captcha本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留 ...

  7. 安卓普通类通过classloader访问资源文件

    Android studio不知道怎么设置,才可以在生成APK时把一些文件打包进去. 但是不管怎么样,放在res文件夹下的东西是一定得打包的.所以把一些资源文件放在res/raw这个文件夹里是科学的. ...

  8. mysqldump 逻辑备份的正确姿势

    在上一篇文章 MySQL 命令行工具之 mysqldump 深入研究 中,我们搞定了mysqldump的参数和基本原理.那么我们该怎么样最好的使用它的?它有哪些坑呢? 1. 利用mysqldump进行 ...

  9. x01.os.17: 换心术

    在 linux 中编译 linux, 于是 linux 便有了再生能力.这不同于自然界的缓慢进化,可用神速来形容.—— 和强大的 windows 相抗衡,便是证明! 我在 ubuntu 中的编译方法如 ...

  10. 中科院分词ICTCLAS5.0_JNI 使用方法

    1.简介 中国科学院计算技术研究所在多年研究基础上,耗时一年研制出了基于多层隐码模型的汉语词法分析系统 ICTCLAS(Institute of Computing Technology, Chine ...