目前我正在尝试构建一个小的PHP - Soap Connector,到目前为止工作得非常好。但是,当我将我的小脚本部署到我的服务器时,它将不再起作用,我不知道为什么。
我以两种不同的方式连接(通过卷曲SOAP WSDL方案,将其临时保存在脚本位置,并从中创建新的SOAP客户端,并使用SOAP WSDL Scheme URL直接创建SOAP客户端) ):
$opts = array(
'http'=>array(
'user_agent' => 'PHP Soap Client'
)
);
$context = stream_context_create($opts);
// SOAP 1.2 client
$params = array (
'encoding' => 'UTF-8',
'verifypeer' => false,
'verifyhost' => false,
'soap_version' => SOAP_1_2,
'trace' => 1,
'exceptions' => 1,
'connection_timeout' => 30,
);
$curlStuff = curl_init($soapURL);
curl_setopt($curlStuff,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curlStuff,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($curlStuff,CURLOPT_TIMEOUT,30);
$response = curl_exec($curlStuff);
$info = curl_getinfo($curlStuff);
if($response) {
file_put_contents("./tempSoapScheme.wsdl", $response);
}
$soapClient = new SoapClient(
'./tempSoapScheme.wsdl',
array(
'trace' => 1,
'stream_context' => $context,
'cache_wsdl' => WSDL_CACHE_NONE
)
);
$soapClientTwo = new SoapClient(
$soapURL,
array(
'trace' => 1,
'stream_context' => $context,
'cache_wsdl' => WSDL_CACHE_NONE
)
);
$result = $soapClient->myLoginMethod(
array(
'username' => 'my@email.example',
'password' => 'password'
)
);
正如我之前所说 - 在我的本地机器上,它就像一个魅力,一切都很好。不在脚本中的参数“soapURL”只是我的SOAP WSDL Scheme的https路径。
我在“$ params”数组中尝试了不同的选项,其他curl setopt设置,但我无法使其工作。
来自两个SoapClients的响应:
SOAP-ERROR: Parsing WSDL: Couldn't load from '<MyURL>' : failed to load external entity "<MyURL>"
,这是非常罕见的,因为CURL可以保存所有内容。
你对我有什么建议吗?
编辑 - 忘记了最重要的事情: - 应该执行脚本的服务器具有非常强大的防火墙限制,并且SOAP URL Scheme位于另一台服务器上(不同)。我想,这就是重点,为什么它不起作用,但我通过执行CURL从Scheme接收到答案。所以它只是SOAP?