Webservice请求的使用方法


在iphone的开发当中,会涉及到很多的服务,比如说获取天气,获取IP地址,获取手机归属地的功能。这些功能实际上使用的是webservice的功能。这个功能在iphone开发当中,应该是非常常用的功能。


具体的webservice地址为:www.webxml.com.cn,这个地址,提供了上述提到的各种功能。


在程序中,使用webservice的方法,总体来说有两种方法。


1、使用soap的POST请求的方法,发送xml的soap格式的消息,然后获得xml格式的结果,然后在做parse,就可以完成相关内容的处理了。


  NSString *province=[NSStringstringWithFormat:@"上海"];
    //设置soap请求信息
NSString *soapString=[[NSStringalloc] initWithFormat:@"<?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>"
  "<getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
  "<theCityName>%@</theCityName>"
  "</getWeatherbyCityName>"
  "</soap:Body>"
  "</soap:Envelope>",province];
    
    NSLog(@"%@",soapString);
    //soap请求地址
    NSURL *url=[[NSURLalloc] initWithString:@"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"];
    //请求
    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
    //设置请求头部
    ////设置ContentType
    [request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    ////设置SOAPAction
    [request addValue:@"http://WebXml.com.cn/getWeatherbyCityName" forHTTPHeaderField:@"SOAPAction"];
    //设置Content-length
    [request addValue:[NSStringstringWithFormat:@"%d",[soapString length]] forHTTPHeaderField:@"Content-Length"];
    //设置请求类型 POST或GET
    [request setHTTPMethod:@"POST"];
    //设置请求Body(只有post方式有)
    [request setHTTPBody:[soapString dataUsingEncoding:NSUTF8StringEncoding]];
    //连接
    NSURLConnection *connection=[NSURLConnection connectionWithRequest:request delegate:self];
    
    if (connection) {
        webData=[NSMutableData data];
    }
}
 
_________ViewController文件_____________
#import <UIKit/UIKit.h>
//注意使用的协议
@interface WebServiceViewController : UIViewController<NSURLConnectionDelegate,NSURLConnectionDataDelegate>{
    NSMutableData *webData;
    UIWebView *myWebView;
    UITextField *textFiled;
}
 
@property (strong, nonatomic) NSMutableData *webData;
@property (strong, nonatomic) UIWebView *myWebView;
@property (strong, nonatomic) UITextField *textFiled;
 
-(void) buttonClicked:(id) sender;
 
@end
 
---------NSURLConnectionDelegate,NSURLConnectionDataDelegate实现方法---------
//接收相应的时候触发
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    [webData setLength:0];
}
//接收数据的时候触发
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [webData appendData:data];
}
//全部完成时触发
-(void) connectionDidFinishLoading:(NSURLConnection *)connection{
    NSString *dataString=[[NSStringalloc] initWithBytes:[webDatabytes] length:[webDatalength] encoding:NSUTF8StringEncoding];
    NSLog(@"%@",dataString);
}
 
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"Error:%@",error);
}


2、方法是直接获取NSData的数据


NSString *weatherRequestUrlStr = [NSString stringWithFormat:@"%@%@",kWeatherServiceURLStr,[[ipCityLocation citySimpleName] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"request = %@", weatherRequestUrlStr);
NSData *weatherReponseData = [NSData dataWithContentsOfURL:[NSURL URLWithString:weatherRequestUrlStr]];

这样通过NSData获取到响应数据,然后剩下的就是处理相应数据了。可以使用NSXMLParserDelegate,这个委托的处理方法类似于扫描的过程,从而完成parse的内容。


xmlParser = [[NSXMLParser alloc] initWithData:weatherReponseData];

[xmlParser setDelegate:self];
[xmlParser setShouldProcessNamespaces:NO];
[xmlParser setShouldReportNamespacePrefixes:NO];
[xmlParser setShouldResolveExternalEntities:NO];


分析的内容格式如下:

<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">
<string> 直辖市 </string>
<string> 上海 </string>
<string> 58367 </string>
<string> 58367.jpg </string>
<string> 2012-8-13 19:47:13 </string>
<string> 28℃/35℃ </string>
<string> 8月14日 多云 </string>
<string> 南风3-4级 </string>
<string> 1.gif </string>
<string> 1.gif </string>
<string> 今日天气实况:气温:30℃;风向/风力:西北风 1级;湿度:73%;空气质量:良;紫外线强度:中等 </string>
<string>
穿衣指数:天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。 感冒指数:暂无。 运动指数:天气较好,较适宜于户内运动,因气温较高,适当降低运动强度,风力较强,在户外运动注意防风。 洗车指数:适宜洗车,未来持续两天无雨天气较好,适合擦洗汽车,蓝天白云、风和日丽将伴您的车子连日洁净。 晾晒指数:天气不错,适宜晾晒。赶紧把久未见阳光的衣物搬出来吸收一下太阳的味道吧! 旅游指数:白云飘飘,温度高,让人感觉热,幸好风比较大,能缓解炎热的天气。外出旅游请注意防暑降温和防晒。 路况指数:天气较好,路面比较干燥,路况较好,不过天气有点热,定期让车辆休息。 舒适度指数:天气较好,但会使您感到有些热,不很舒适。 空气污染指数:气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。 紫外线指数:属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。
</string>
<string> 27℃/36℃ </string>
<string> 8月15日 多云 </string>
<string> 南风3-4级 </string>
<string> 1.gif </string>
<string> 1.gif </string>
<string> 27℃/34℃ </string>
<string> 8月16日 多云 </string>
<string> 西南风3-4级 </string>
<string> 1.gif </string>
<string> 1.gif </string>
<string>
上海简称:沪,位置:上海地处长江三角洲前缘,东濒东海,南临杭州湾,西接江苏,浙江两省,北界长江入海,正当我国南北岸线的中部,北纬31°14′,东经121°29′。面积:总面积7823.5平方公里。人口:人口1000多万。上海丰富的人文资源、迷人的城市风貌、繁华的商业街市和欢乐的节庆活动形成了独特的都市景观。游览上海,不仅能体验到大都市中西合壁、商儒交融、八方来风的氛围,而且能感受到这个城市人流熙攘、车水马龙、灯火璀璨的活力。上海在中国现代史上占有着十分重要的地位,她是中国共产党的诞生地。许多震动中外的历史事件在这里发生,留下了众多的革命遗迹,处处为您讲述着一个个使人永不忘怀的可歌可泣的故事,成为包含民俗的人文景观和纪念地。在上海,每到秋祭,纷至沓来的人们在这里祭祀先烈、缅怀革命历史,已成为了一种风俗。大上海在中国近代历史中,曾是风起云涌可歌可泣的地方。在这里荟萃多少风云人物,散落在上海各处的不同住宅建筑,由于其主人的非同寻常,蕴含了耐人寻味的历史意义。这里曾留下许多革命先烈的足迹。瞻仰孙中山、宋庆龄、鲁迅等故居,会使您产生抚今追昔的深沉遐思,这里还有无数个达官贵人的住宅,探访一下李鸿章、蒋介石等人的公馆,可以联想起主人那段显赫的发迹史。
</string>
</ArrayOfString>

上述就是NSMutableArray 的格式,逐个的分析和解释字符串。


你可能感兴趣的:(webservice,iPhone,SOAP,interface,旅游,encoding)