ios请求webservice几种方式
(1)回传soap字符串进行请求
(2)http://xxx/方法名/参数名=参数值 ===>这种方式请求
基于很多新手都对wsdl都不认识,又谈何请求,更别提soap字符串了,我在这里主要图解说明如何拼凑soap字符串进行请求
一.命名空间在根目录上
(1)soap字符串格式如下: (注:只有文字部分才要修改,非文字部份都是固定的)
<?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/" xmlns:前缀名(如:ns1)="webservice命名空间">
<soap:Header>
<!----头内容----->
</soap:Header>
<soap:Body>
<前缀名:方法名>
<参数名1>参数值1</参数名1>
<参数名2>参数值2</参数名2>
.......
</前缀名:方法名>
</soap:Body>
</soap:Envelope>
a.soap:Header有请求头就加上,没上就可去悼soap:Header节点
b.如果调用方法没有参数,则改成<前缀名:方法名></前缀名:方法名>
(2)以http://policy.mofcom.gov.cn/webservice/ClawWS?wsdl 做为参考图解说明
a.以我们要调用simpleQuery方法为例,则soap字符串为:
<?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/" xmlns:ns1="http://webservice.modules.springside.org">
<soap:Header>
<authHeader>
<userId>wanfang</userId>
<userPass>wanfang</userPass>
</authHeader>
</soap:Header>
<soap:Body>
<ns1:simpleQuery>
<queryString>法律</queryString>
<section>all</section>
<pageNo>1</pageNo>
</ns1:simpleQuery>
</soap:Body>
</soap:Envelope>
b.图解说明
二.命名空间在方法名上
(1)soap字符串格式如下: (注:只有文字部分才要修改,非文字部份都是固定的)
<?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:Header>
<!----头内容----->
</soap:Header> <soap:Body> <方法名 xmlns="webservice命名空间"> <参数1>参数值1</参数1> <参数2>参数值2</参数2>
..... </方法名>
</soap:Body></soap:Envelope>
a.soap:Header有请求头就加上,没上就可节点
b.如果调用方法没有参数,则改成<方法名 xmlns="webservice命名空间"></方法名>
(2)以http://webservice.webxml.com.cn/WebServices/StockInfoWS.asmx?wsdl 进行图解说明
a.我们要调用getStockInfo方法,则soap字符串为:
<?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>
<getStockInfo xmlns="http://webxml.com.cn/">
<theStockCode>参数值1</theStockCode>
<userID>参数值2</userID>
</getStockInfo>
</soap:Body>
</soap:Envelope>
b.图解说明
三.ios调用webservice
NSString *soapMsg=@"我们拼成的soap字符串";
NSString *space=@"webservice命名空间";
NSString *methodname=@"要调用的方法名";
NSURL *url=[NSURL URLWithString:@"webservice地址"];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]];
NSString *soapAction=[NSString stringWithFormat:@"%@%@",space,methodname];
//头部设置
NSDictionary *headField=[NSDictionary dictionaryWithObjectsAndKeys:[url host],@"Host",
@"text/xml; charset=utf-8",@"Content-Type",
msgLength,@"Content-Length",
soapAction,@"SOAPAction",nil];
[request setAllHTTPHeaderFields:headField];
//超时设置
[request setTimeoutInterval: 30 ];
//访问方式
[request setHTTPMethod:@"POST"];
//body内容
[request setHTTPBody:[soapMsg dataUsingEncoding:NSUTF8StringEncoding]];
注:
a.有些webservice调用需要设SOAPAction,有些则不要,要就加上,不要就去悼
b.如果用第一种[命名空间在根目录上]方式生成的soap字符串调用会有错,则用第二种[命名空间在方法名上]生成的字符串调用
c.还是不行,请教写webservice接口的人员,找不到人,只能自已琢磨了