新闻中心

如何通过PHP调用SOAP服务_PHP SOAP服务调用与WS-Security实现教程

2025-11-19
浏览次数:
返回列表
首先使用SoapClient进行基础调用,若需WS-Security则手动构造包含UsernameToken的安全头并注入请求,或通过扩展类如NTLMSoapClient支持NTLM认证,最终发送带安全头的SOAP请求以完成身份验证与数据交互。

如何通过php调用soap服务_php soap服务调用与ws-security实现教程

如果您尝试通过PHP调用一个需要身份验证的SOAP服务,但请求被拒绝或返回空响应,则可能是由于缺少WS-Security头信息或SOAP配置不正确。以下是实现PHP调用支持WS-Security的SOAP服务的具体步骤:

一、使用SoapClient进行基础SOAP调用

在PHP中,内置的SoapClient类可用于发起基本的SOAP请求。此方法适用于不需要复杂安全头的Web服务。

1、定义WSDL地址并创建SoapClient实例:

$client = new SoapClient('http://example.com/service.wsdl');

2、调用远程方法并传入参数:

$result = $client->GetUserInfo(['id' => 123]);

3、输出结果以检查返回数据:

var_dump($result);

二、手动构造带WS-Security头的SOAP请求

当目标服务要求WS-Security认证时,PHP原生SoapClient无法直接添加安全头,需通过自定义XML请求体实现。

1、构建包含UsernameToken的身份验证头:

$username = 'your_username';

$password = 'your_password';

$timestamp = gmdate('Y-m-dTH:i:sZ');

小云雀 小云雀

剪映出品的AI视频和图片创作助手

小云雀 1949 查看详情 小云雀

2、拼接完整的SOAP信封,包含wsse:Security头:

$soapHeader = '' . $username . '' . $password . '' . base64_encode(random_bytes(16)) . '' . $timestamp . '';

3、将安全头条目注入SoapClient上下文选项中:

$options = [ 'trace' => 1, 'exceptions' => 1, 'stream_context' => stream_context_create([ 'http' => [ 'header' => "Content-Type: text/xml; charset=utf-8 " . "SOAPAction: "" " ] ]) ];

4、发送自定义请求体:

$client->__doRequest($requestBody, $endpoint, '', '1.2', SOAP_1_2);

三、使用第三方库(如NTLMSoapClient)处理高级认证

对于集成Windows认证或NTLM机制的服务端点,可通过扩展SoapClient类来支持额外的身份验证流程。

1、安装支持NTLM的库,例如通过Composer引入:

composer require phpntlm/phpntlm

2、继承SoapClient并重写__doRequest方法以插入认证头:

class NTLMSoapClient extends SoapClient { private $user; private $pass; public function __construct($wsdl, $user, $pass, $options = []) { $this->user = $user; $this->pass = $pass; parent::__construct($wsdl, $options); } public function __doRequest($request, $location, $action, $version, $one_way = 0) { $headers = [ 'Method: POST', 'Connection: Keep-Alive', 'User-Agent: PHP-SOAP', 'Content-Type: text/xml; charset=utf-8', 'Authorization: NTLM ' . base64_encode("{$this->user}:{$this->pass}") ]; stream_context_set_option($this->__getSoapHeaders(), 'http', 'header', implode(" ", $headers)); return parent::__doRequest($request, $location, $action, $version, $one_way); } }

3、实例化NTLMSoapClient并调用服务方法:

$client = new NTLMSoapClient('http://example.com/service.wsdl', 'domain\user', 'password');

$response = $client->SomeSecureMethod(['param' => 'value']);

以上就是如何通过PHP调用SOAP服务_PHP SOAP服务调用与WS-Security实现教程的详细内容,更多请关注php中文网其它相关文章!


# 适用于  # 柳北区实用的seo策略  # 全国专业网站建设公司  # 新乡百度网站推广优化  # 渭南网站建设配置  # 活动房b2b网站推广  # seo网站推广公司  # 江门seo优化思路  # 医院信用卡营销推广方案  # 如何通过微博营销推广  # 如何为豆瓣营销推广  # 解决问题  # 事件中  # 中文网  # 相关文章  # php调用  # 不需要  # 如果您  # 自定义  # 上传  # 身份验证  # stream  # win  # keep-alive  # ai  # windows  # composer  # word  # php 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 微信聊天记录怎么加密_微信聊天记录加密方法  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  Safari自带网页翻译功能怎么用 无需插件轻松看懂外文网站【方法】  响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配  Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换  win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】  J*aScript数组对象转换:按指定键分组与值收集  天眼查企业查询官网入口 天眼查官方网页版查询  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  J*aScript中在Map循环中检测并处理空数组元素  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  mysql备份恢复性能优化_mysql备份恢复性能优化方法  Angular Material 垂直步进器:实现底部到顶部排序的教程  Archive of Our Own官网直达 AO3最新可用地址一览  J*a递归快速排序中静态变量导致数据累积问题的解决方案  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  漫蛙漫画网页端入口 漫蛙2官方正版漫画站点  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  4399体育竞技小游戏_4399小游戏赛事入口  照顾宝贝2小游戏点击立即在线玩  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  如何使用纯J*aScript判断Input元素是否在特定类容器内  4399网页游戏电脑版全新入口 4399电脑端在线玩指南  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  韩剧圈正版入口页面_韩剧圈官网登录链接  J*aScript中localStorage数据的获取、清洗与格式化教程  怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】  将HTML Canvas内容转换为可上传的图像文件(File对象)  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  J*a实现学校排课程序_面向对象结构化项目示例  Flexbox布局实践:实现粘性导航栏与底部固定页脚  微博网页版首页入口 微博电脑端官网登录链接  最新韩小圈网页版登录入口_官网在线观看官方链接  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  AO3官方在线访问地址 Archive of Our Own最新镜像合集  Python实现多节点属性重叠度分析教程  Web Components中自定义开关组件状态同步的常见陷阱与解决方案  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情  蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接  Python多版本共存与虚拟环境管理深度指南  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法 

搜索