PHP Soap请求Cookie存储报错:无法访问SoapClient私有属性$_cookies
错误原因与解决方案
错误根源
你遇到的致命错误是因为直接访问了SoapClient类的私有属性$_cookies。PHP中类的私有成员仅能在类内部访问,外部代码直接调用会触发权限错误。
修正方案
要获取SOAP请求返回的Cookie,正确的做法是开启SoapClient的trace选项,通过公开方法__getLastResponseHeaders()获取响应头,再从中解析Cookie信息。同时需要修正原代码中的字符串语法错误。
修正后的完整代码
// Login information $soapClient = new SoapClient( 'http://your-target-url', // 修正原代码的字符串拼接错误,替换为实际URL array( 'soap_version' => SOAP_1_2, 'style' => SOAP_DOCUMENT, 'use' => SOAP_LITERAL, 'features' => SOAP_USE_XSI_ARRAY_TYPE, 'trace' => 1 // 开启trace模式,允许获取响应头 ) ); $loginResponse = $soapClient->Login( array('username' => 'your-username', 'password' => 'your-password') ); $loginResult = $loginResponse->LoginResult; // 从响应头解析Cookie $responseHeaders = $soapClient->__getLastResponseHeaders(); preg_match_all('/Set-Cookie: (.*?);/i', $responseHeaders, $cookieMatches); $cookies = []; if (!empty($cookieMatches[1])) { foreach ($cookieMatches[1] as $cookieStr) { list($cookieName, $cookieValue) = explode('=', $cookieStr, 2); $cookies[$cookieName] = $cookieValue; } } print_r($loginResult); print_r($cookies); // 输出解析后的Cookie数组
关键说明
- 开启trace选项:只有在构造
SoapClient时添加'trace' => 1,才能调用__getLastResponseHeaders()获取响应头信息。 - 解析Cookie:通过正则匹配响应头中的
Set-Cookie字段,拆分出Cookie的名称和值。 - 语法错误修正:原代码中
'http://'url'是无效的字符串写法,需改为合法的URL字符串(直接写完整URL或用字符串拼接'http://' . $url)。
内容的提问来源于stack exchange,提问作者andrea
相关产品推荐
相关产品推荐

