- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
php soap 编码转换
在给 CHINAZ 资讯 (dedecms) 做同步 bbsmax passport 登陆 api 时,因为 bbsmax 使用 utf-8
编码,而资讯这边用的是 GBK 编码,导致乱码。开始想自己转码,但有点麻烦。后面想 SOAP 既然用来
针对不同平台, 那肯定也包括编码问题, 就又认真看了 PHP 手册,介绍里虽然没有提到, 却发现 Examples
里有,访问很简单。
view plaincopy to clipboardprint?
1. $client = new SoapClient( some.wsdl , array ( encoding = GBK ));
只要这么简单,剩下的 PHP 自己帮忙实现了!
通过 SoapHeader 实现身份认证
之前一直抱怨 php 的 soap 很傻,在 client 端有设置 header 的方法,在 server 端却没有取 header 的方法。
那是很傻很天真,直接用正则表达式从 soap 信封的 header 中提取 header 信息。
最近由于有项目要发布 webservice ,重新燃起对 soap 的兴趣,看了 w3 的英文文档,那是个云里雾里。
收集了一些资料,做了一个关于 saop header 进行身份认证的实验。
在这个实验中,假定 soap client 用一个字符串作为身份认证的标识, soap server 取到这个字符串后,对
其进行辨认,如果与期望相符合,认证通过,如果不符,抛出 soapFault 。
理论就不多说了,我也不懂,直接上代码
client.php
?php
$cli = new SoapClient(null, array(uri = /namespace/, location =
http://localhost/server.php, trace = true));
$h = new SoapHeader(/namespace/, auth, 123456789, false, SOAP_ACTOR_NEXT);
$cli-__setSoapHeaders(array($h));
try {
echo $cli-say();
} catch (Exception $e) {
echo $e-getMessage();
}
server.php
?php
class Server{
public function auth($a)
{
if($a != 123456789){
throw new SoapFault(Server, 您无权访问 );
}
}
function say()
{
return Hi;
}
}
$srv = new SoapServer(null, array(uri = http://localhost/namespace));
$srv-setClass(Server);
$srv-handle();
以上代码就实现了认证的功能,最关键的地方就是 SoapHeader 的构造。 soapHeader 有五个构造参数,
namespace
无用
name
鉴别身份标识的函数或者方法名
data
存放标识身份的字符串
mustUndersta
文档评论(0)