[英]SOAP-ERROR: Parsing WSDL: Couldn't load from <URL>
在 PHP 中:我收到一个错误:
SOAP 错误:解析 WSDL:无法从“ http://xxx.xxxx.asmx?WSDL ”加载:无法加载外部实体“ http://xxx.xxxx.asmx?WSDL ”
我的代码是:
<?php
header('Content-Type: text/plain');
if (!class_exists('SoapClient')) {
die ("You haven't installed the PHP-Soap module.");
}
ini_set('max_execution_time', 1);
try {
$options = array(
'soap_version' => SOAP_1_2,
'exceptions' => true,
'trace' => 1,
'cache_wsdl' => WSDL_CACHE_NONE
);
$client = new SoapClient('http://xxx.xxxx.asmx?WSDL', $options);
// Note where 'CreateIncident' and 'request' tags are in the XML
$results = $client->CreateIncident(
array(
'FirstName' => 'gyaan',
'LastName' => 'p',
'Email' => 'aa@gmail.com',
'QueryProductClass' => 'QueryProductClass',
'ChannelCode' => 12,
'CampaignCode' => 234,
'Lob' => 'Lob',
'PackageName' => 'SEONI',
'PackageCode' => 'SMP',
'TravelYear' => 2012,
'TravelMonth' => 06,
'TravelDay' => 29,
'CityOfResidence' => 'Jabalpur',
'ncidentNotes' => 'testing ignor this',
'MobilePhone' => '1234567890',
'DepartureCity' => 'bangalore',
'NoOfDaysTravel' => '3 Days',
'VendorName' => 'TEST HIQ'
)
);
}
catch (Exception $e) {
echo "<h2>Exception Error!</h2>";
echo $e->getMessage();
}
?>
请告诉我哪里出错了,我是 WSDL 和肥皂新手
我通过启用php_openssl
扩展在我的 WAMP 设置中解决了这个问题,因为我从使用的 URL 加载https://
。
我有完全相同的错误消息。 就我而言,在我的/etc/hosts
文件(在托管服务的服务器上)中为 WSDL 中引用的目标服务器创建一个条目修复了它。
一种措辞奇怪的错误消息..
我遇到了这个问题,我花了几个小时才弄清楚。 此错误的主要原因是 SoapClient 无法从主机流式传输 Web 服务文件。 我在我的 php.ini 文件中取消了这一行“extension=php_openssl.dll”的注释,它可以工作。
试试这个:
$Wsdl = 'http://xxxx.xxx.xx/webservice3.asmx?WSDL';
libxml_disable_entity_loader(false); //adding this worked for me
$Client = new SoapClient($Wsdl);
//Code...
如果您想在本地主机上使用它,请使用 WAMP。
然后单击托盘图标>PHP 服务> 并启用以下内容:
ps 一些免费的网络托管可能没有这些选项
尝试添加这段代码。 它对我有用。
$opts = array(
'ssl' => array(
'ciphers' => 'RC4-SHA',
'verify_peer' => false,
'verify_peer_name' => false
),
);
// SOAP 1.2 client
$params = array(
'encoding' => 'UTF-8',
'verifypeer' => false,
'verifyhost' => false,
'soap_version' => SOAP_1_2,
'trace' => 1,
'exceptions' => 1,
'connection_timeout' => 180,
'stream_context' => stream_context_create( $opts ),
);
$url = 'http://www.webservicex.net/globalweather.asmx?WSDL';
try {
$client = new SoapClient( $url, $params );
} catch ( SoapFault $fault ) {
echo '<br>' . $fault;
}
我遇到了同样的错误,我解决了它,在 php.ini 文件中查找soap设置并将soap.wsdl_cache_enabled=1更改为soap.wsdl_cache_enabled=0
将 dns 条目添加到您的系统主机文件中
例如:http://aaa.com/service.asmx?WSDL
您可以通过 ping 获取 aaa.com 的 IP 地址
然后添加到hosts文件中
从php.ini配置文件启用所有这些
extension=php_openssl.dll
extension=php_curl.dll
extension=php_xmlrpc.dll
您可以使用此选项通过 wdsl 调用soap:
$opts = array(
'http' => array(
'user_agent' => 'PHPSoapClient'
)
);
$context = stream_context_create($opts);
$soapClientOptions = array(
'stream_context' => $context,
'cache_wsdl' => WSDL_CACHE_NONE
);
$wsdlUrl = 'your wsdl url';
$soapClient = new SoapClient($wsdlUrl, $soapClientOptions);
$result = $soapClient->VerifyTransaction($refNum, $MerchantCode);
也有类似的错误。 意识到我为特定主机设置了 .htpasswd。 从 .htaccess 文件中取消注释它并且工作正常。
我遇到了同样的错误
无法连接到 Magento WebService API:SOAP-ERROR:解析 WSDL:无法从“example.com/api/soap/?wsdl”加载:无法加载外部实体“example.com/api/soap/?wsdl ”
一旦我将 Magento 根 URL 更新为
example.com/index.php/api/soap/?wsdl
是的,我缺少导致错误的 index.php。
正如前面的回复中提到的,当通过 HTTPS 连接与 SOAP 服务交互时可能会发生此错误,并且连接存在问题。 问题可能出在远程端(无效证书)或客户端上(如果缺少 CA 或 PEM 文件)。 有关所有可能的 SSL 上下文设置,请参阅http://php.net/manual/en/context.ssl.php 。 就我而言,设置本地证书的路径解决了这个问题:
$context = ['ssl' => [
'local_cert' => '/path/to/pem/file',
]];
$params = [
'soap_version' => SOAP_1_2,
'trace' => 1,
'exceptions' => 1,
'connection_timeout' => 180,
'stream_context' => stream_context_create($context),
'cache_wsdl' => WSDL_CACHE_NONE, // eliminate possible issue from cached wsdl
];
$client = new SoapClient('https://remoteservice/wsdl', $params);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.