2012-06-18 66 views
16

加載在PHP:我得到一個錯誤:SOAP的錯誤:解析WSDL:無法從<URL>

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxx.xxxx.asmx?WSDL' : 
failed to load external entity "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'=>'[email protected]', 
         '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和肥皂

回答

4

我有完全相同的錯誤信息。在我的情況下,在我的/etc/hosts文件(託管服務的服務器上)中爲WSDL中引用的目標服務器創建一個條目來修復它。

樣的措辭奇怪的錯誤消息的..

+0

謝謝,這個答案的人。我不知道爲什麼沒有其他人發佈像你這樣的類似問題的解決方案,但我花了很多時間找到這個確切的解決方案,可能你爲我節省了幾個無用的研究時間。 –

1

DNS條目添加到系統hosts文件
例如:http://aaa.com/service.asmx WSDL
你可以得到aaa.com與平
然後IP地址添加到主機文件

28

我通過啓用php_openssl擴展解決了這個在我的WAMP的設置,因爲URL我是從使用https://加載。

+13

對我來說,它是啓用,仍然沒有結果! – Abadis

4

如果你想在本地主機上使用它,那麼使用WAMP。

然後單擊托盤圖標> PHP服務>還有啓用如下:

  • SOAP
  • php_openssl
  • OpenSSL的
  • 捲曲

p.s.一些免費的網絡託管可能沒有這些選項

+2

有什麼不同? openssl vs php_openssl –

6

我有這個問題,並花了我幾個小時弄清楚。此錯誤的主要原因是SoapClient無法從主機流式傳輸Web服務文件。 我取消註釋這行「extension = php_openssl.dll」在我的php.ini文件,它的工作原理。

0

也有類似的錯誤。實現我有一個.htpasswd設置爲特定的主機。從.htaccess文件中取消註釋並且工作正常。

1

的php.ini配置文件

extension=php_openssl.dll 
extension=php_curl.dll 
extension=php_xmlrpc.dll 
2

嘗試增加這段代碼啓用所有這些。它爲我工作。

$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{ 
 
\t $client = new SoapClient($url,$params); 
 
} 
 
catch(SoapFault $fault) { 
 
\t echo '<br>'.$fault; 
 
}

+0

這些選項禁用HTTPS安全功能...通常不是一個好主意。 –

+0

在ssl上下文中添加密碼選項爲我解決了同樣的問題。謝謝! – Kambaa

0

我得到了同樣的錯誤一次更新我的Magento根URL來

example.com/index.php/api/soap/?wsdl

是的,我錯過了指數

Could not connect to the Magento WebService API: SOAP-ERROR: Parsing WSDL: Couldn't load from 'example.com/api/soap/?wsdl' : failed to load external entity "example.com/api/soap/?wsdl"

,我的問題解決了.php導致錯誤。

2

我得到了同樣的錯誤,我解決了這個問題尋找php.ini文件中的肥皂設置和更改soap.wsdl_cache_enabled = 1soap.wsdl_cache_enabled = 0

+0

我得到了同樣的錯誤,這對我工作...我只是有問題,我的連接和PHP probally被緩存了。 –

5

試試這個:

$Wsdl = 'http://xxxx.xxx.xx/webservice3.asmx?WSDL'; 
libxml_disable_entity_loader(false); //adding this worked for me 
$Client = new SoapClient($Wsdl); 
//Code... 
0

正如前面的回覆中所述,通過HTTPS連接與SOAP服務交互時可能會發生此錯誤,並且連接標識出問題。問題可能出在遠端(無效證書)或客戶端(如果缺少CA或PEM文件)。 請參閱http://php.net/manual/en/context.ssl.php瞭解所有可能的SSL上下文設置。 在我的情況下,設置我的本地證書的路徑解決了問題:

$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); 
相關問題