Uncaught soapfault exception wsdl soap error parsing wsdl couldn t load from

Добрый день, уважаемые форумчане! Уже третий день бьюсь над SOAP, весь нет перелопатила, не могу заставить его работать. Давайте начну с описания...

За последние 24 часа нас посетили 11612 программистов и 1179 роботов. Сейчас ищут 242 программиста …


  1. Sogno

    Sogno
    Активный пользователь

    С нами с:
    20 июл 2012
    Сообщения:
    7
    Симпатии:
    0

    Добрый день, уважаемые форумчане!
    Уже третий день бьюсь над SOAP, весь нет перелопатила, не могу заставить его работать.
    Давайте начну с описания системы: Windows XP, PHP 5.1.1 работает под IIS.
    Стоит задача «дернуть» веб-сервис.
    Код следующий и примитивен до безобразия:

    Данный код генерирует ошибку: На php.net нашла следующее:Вроде как симптомы мои

    Что я сделала для подключения SOAP:
    1. В php.ini подключила расширение:
    extension=php_soap.dll
    В папке с расширениями лежит соответствующая длл c:phpextensions php_soap.dll
    2. Подключила php_curl.dll (в php.ini + файлы libeay32.dll и ssleay32.dll скопировала в системную папку c:WINDOWSsystem32 )
    3. Подключила php_openssl.dll
    4. Вроде как подключила libxml2.dll. Говорю «вроде» потому как там куча длл, и вменяемой инсрукции по установке под windows не нашла, только вот это, выполнила все шаги по инструкции:

    Кто-нибудь может подсказать, как проверить работоспособность libxml? Я до сих пор точно не уверена, нормально ли подключена библиотека.
    Господа, буду всем благодарна за хоть какую-то помощь, потому как уже не знаю, что ещё попробовать и как заставить работать soap.


  2. igordata

    Команда форума
    Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.768

    Привет, девушка! =)

    а первую строчку ты разумно проигнорировала? искать проще там где светлее, а не там, где потеряла? :D

    там тебе был дан ответ сервером: 401.
    ошибки потом просто от того, что не удалось подключиться.


  3. Sogno

    Sogno
    Активный пользователь

    С нами с:
    20 июл 2012
    Сообщения:
    7
    Симпатии:
    0

    :) Ну не то, чтобы игнорировала…
    Скорее не всё рассказала в своём письме.
    Сперва я пыталась копать именно в сторону аутентификации.
    Использовала для этого CURL:

    1. ini_set(«soap.wsdl_cache_enabled», «0»);
    2. $wsdl_url=»http://dir/DataService.asmx?wsdl»;
    3. $wsdl=file_get_contents_curl($wsdl_url);
    4. $client = new SoapClient($wsdl);
    5. function file_get_contents_curl($url) {
    6.     curl_setopt($ch, CURLOPT_HEADER, 0);
    7.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
    8.     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    9.     curl_setopt($ch, CURLOPT_USERPWD, ‘Login:Password’);
    10.     curl_setopt($ch, CURLOPT_URL, $url);

    в итоге код даёт ошибку:

    Причём переменная $wsdl содержит нужный мне wsdl-контент. Но soap его не съедает.
    С этой ошибкой тоже не удалось сразиться. У меня лично вызывает сомнение, можно ли конструктору soap подсунуть контент wsdl, в то время как по мануалу нужен URI файла wsdl.
    По-другому (кроме как с использованием curl) осуществить авторизованный вход не знаю как.
    Может, кто-нибудь ещё что-то подскажет?

    Внимательнее прочитала мануал к SOAP и нашла способ использовать авторизацию без переподвыподвертов с curl:

    1. $client = new SoapClient($wsdl_url, array(‘login’=>’Login’, ‘password’=>’Pass’));

    в итоге имеем ошибку:


  4. Your

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7

    Было тут у же про соап, не раз…


  5. igordata

    Команда форума
    Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.768

    курл тут при чем? тоже светлее было? (о_О)
    курл при чем тут? =) по соапу подключаешься!


  6. Sogno

    Sogno
    Активный пользователь

    С нами с:
    20 июл 2012
    Сообщения:
    7
    Симпатии:
    0

    igordata, я ж объяснила, что курл использовала для авторизованного чтения контента по заданному урл, следом объяснила, что ошибалась и использовала тот же соап но с авторизацией.
    К чему тут ваши издевательства? Если есть что сказать — то говорите прямо и без издевёк, а если нечего, то не тролльте и не тратьте ни своё ни моё время.


  7. igordata

    Команда форума
    Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.768

    так у вас оно работает или не работает? вы можете привести корректный код и нормальные, вызванные не черезжопным программированием, ошибки?


  8. Sogno

    Sogno
    Активный пользователь

    С нами с:
    20 июл 2012
    Сообщения:
    7
    Симпатии:
    0

    1. $wsdl_url=»http://dir/DataService.asmx?wsdl»;
    2. ini_set(«soap.wsdl_cache_enabled», «0»);
    3. $client = new SoapClient($wsdl_url, array(‘login’=>’Login’, ‘password’=>’Pass’));

    Ошибка:

    Код, по-моему, предельно нечерезжопный. Попытка элементарно создать объект soap вызывает ошибку. Я пытаюсь понять, что конкретно не нравится интерпретатору. Что такое «string(3316)» в тексте ошибки?


  9. igordata

    Команда форума
    Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.768

    этот — да. А ошибки приводились к тому, что был выше.

    соап вроде как умеет кидать эксепшны. Можно посмотреть, выкинет ли.

    попробуй:

    1.      $client = new SoapClient($wsdl_url, array(‘login’=>‘Login’, ‘password’=>‘Pass’));


  10. Sogno

    Sogno
    Активный пользователь

    С нами с:
    20 июл 2012
    Сообщения:
    7
    Симпатии:
    0

    igordata, спасибо, в понедельник на работе попробую. Может, что и прояснится.


  11. Sogno

    Sogno
    Активный пользователь

    С нами с:
    20 июл 2012
    Сообщения:
    7
    Симпатии:
    0

    Продолжаю мучиться с soap. В понедельник пришла на работу запустила код:

    1.      $client = new SoapClient($wsdl_url, array(‘login’=>’Login’, ‘password’=>’Pass’));

    Он продолажет выдавать ошибку:

    Поговорила с людьми, которые писали сервис, они сказали, что используется не базовый тип аутентификации, а с шифрованием.
    В итоге пробовала добавлять в параметры ‘authentication’=>’SOAP_AUTHENTICATION_DIGEST’, всё равно та же ошибка лезет.
    Нашла в нете, как у человека не удавалось авторизоваться из-за того, что летела кодировка логина и пароля. В результате попробовала добавить в параметры ‘encoding’=>’UTF-8’ (на сервере используется кодировка utf-8).
    По-прежнему лезет ошибка 401 Unauthorized.
    Долго я пробовала всякие комбинации с параметрами, да всё равно ничего не получалось.

    В итоге решила попробовать режим не-WSDL:

    1. ini_set(«soap.wsdl_cache_enabled», «0»);
    2. $wsdl_url=«http://dir/DataService.asmx?wsdl»;
    3. $service_location=‘http://dir/DataService.asmx’;
    4. $service_uri=‘http://uri.org/’;
    5.      $options = array(‘login’=>$login,
    6.                      ‘location’=>$service_location,
    7.                      ‘authentication’=>‘SOAP_AUTHENTICATION_DIGEST’,
    8.                      ‘cache_wsdl’ => ‘WSDL_CACHE_NONE’,
    9.                      ‘soap_version’ => ‘SOAP_1_1’);
    10.      try { $client = new SoapClient(null, $options); }
    11.      catch (Exception $e) { print«Ошибка создания объекта SOAP:<br>».$e->getMessage().«<br>».$e->getTraceAsString(); }
    12.      $params = array(‘orderId’=>52, ‘statusId’=>3);
    13.      try { $response = $client->UpdateOrderStatus($params); }
    14.      catch (Exception $e) { print«Ошибка вызова функции UpdateOrderStatus:<br>».$e->getMessage().«<br>».$e->getTraceAsString(); }
    15.     print «Ошибка работы с SOAP:<br>».$e->getMessage().«<br>».$e->getTraceAsString();

    В итоге (о УРА!) объект soap создаётся без проблем. Даже не знаю, радоваться или ещё рано.
    Но не работает вызов метода веб-сервиса:


  12. igordata

    Команда форума
    Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.768

    А эксепшены, я смотрю, тебе понравились. Правильное дело! =)

    Странно это всё. Это какой-то ваш внутренний корпоративный сайт? http://dir/


  13. Sogno

    Sogno
    Активный пользователь

    С нами с:
    20 июл 2012
    Сообщения:
    7
    Симпатии:
    0

    Да, сервис писался нашими программистами и лежит на нашем сервере. Я просто заменила реальную директорию на dir. У нас такие политики безопасности, ууууу. И никак их не сломишь, этих защитников Родины.


  14. igordata

    Команда форума
    Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.768

    у вас нет доступа к тому проекту? к программистам? к документации? Есть у кого спросить, как надо логиниться-то?

   790th

22.08.13 — 10:36

Из платформы 8.3.2.163 опубликовал веб-сервис на IIS 5.1.

Установил PHP 5.3.271

Сделал файл index.php:

ini_set(«soap.wsdl_cache_enabled», «0»);

$client = new SoapClient(«http://localhost/InfoBase4/ws/wsnomen.1cws?wsdl»;);

При открытии http://localhost/index.php получаю ошибку:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://localhost/InfoBase4/ws/wsnomen.1cws?wsdl’ : failed to load external entity «http://localhost/InfoBase4/ws/wsnomen.1cws?wsdl»; in C:Inetpubwwwrootindex.php:5 Stack trace: #0 C:Inetpubwwwrootindex.php(5): SoapClient->SoapClient(‘http://localhos…’) #1 {main} thrown in C:Inetpubwwwrootindex.php on line 5

При этом если открыть http://localhost/InfoBase4/ws/wsnomen.1cws?wsdl то нормально открывается описание веб сервиса:

This XML file does not appear to have any style information associated with it. The document tree is shown below.

<definitions xmlns=»http://schemas.xmlsoap.org/wsdl/»; xmlns:soap12bind=»http://schemas.xmlsoap.org/wsdl/soap12/»; xmlns:soapbind=»http://sch

… и т.д.

В чем может быть ошибка ?

   790th

1 — 22.08.13 — 10:38

Пардон, код PHP Таков:

ini_set(«soap.wsdl_cache_enabled», «0»);

$client = new SoapClient(«http://localhost/InfoBase4/ws/wsnomen.1cws?wsdl»;);

   790th

2 — 22.08.13 — 10:39

т.е. там нет точки-запятой перед скобкой, подставляется почему то автоматически при публикации в форуме

   sda553

3 — 22.08.13 — 10:47

Раздел [soap] из php.ini дай

   sda553

4 — 22.08.13 — 10:51

И попробуй туда же раскомментировать

extension=php_openssl.dll

там где экстеншены

   790th

5 — 22.08.13 — 10:58

в разделе пхп все норм

[PHP_OPENSSL]

extension=php_openssl.dll

   790th

6 — 22.08.13 — 10:59

сори опять тороплюсь вот:

[PHP_SOAP]

extension=php_soap.dll

   790th

7 — 22.08.13 — 11:26

Обнаружил, что если в пхп написать

$client = new SoapClient(«bugaga»);

то ошибку выдает точно такую же.

А если например:

$client = new SoapClient_(«bugaga»);

то ошибка меняется

Fatal error: Class ‘SoapClient_’ not found in C:Inetpubwwwrootindex.php on line 5

   Asmody

8 — 22.08.13 — 11:40

   790th

9 — 22.08.13 — 15:39

(8) интересно. Установил, запустил ПХП. Просит пароль. Переустановил IIS, настроил у него ПХП, раздал права на папки. Пароль требовать перестал, но и ссылку

http://127.0.0.1/otladka/ws/lyay.1cws?wsdl

теперь не видит. Разбираюсь.

   790th

10 — 22.08.13 — 15:59

Заработало.

Подставил прилагаемый к примеру default.vrd и возможно (точно не помню)затронул настройки безопасности IIS/Свойства: otladka/Безопасность каталога/Анонимный доступ и проверка подл./Изменить. Установлены флаги:

Анонимный доступ

Разрешить управление паролем из ИИС

+Указано имя пользователя

На вкладке «Виртуальный каталог» кроме прочих доступны поля:

Локальный путь

Имя приложения

+кнопка Настройка

Еще вероятнее всего повлияло:

В конфигураторе при публикации Имя: otladka

где то на мисте читал что оно должно соответствовать названию своего каталога (C:Inetpubwwwroototladka)

   790th

11 — 22.08.13 — 16:01

а у меня по-умолчанию имя стояло: db

(8) хороший пример, спасибо !

   790th

12 — 23.08.13 — 10:15

И еще одна любопытная деталь:

Если сейчас обращусь по адресу http://127.0.0.1/index.php

без вопросов откроется пример

А если ввести адрес

http://127.0.0.1/otladka/ws/lyay.1cws?wsdl

То спросит логин и пароль. В этом примере, в PHP файле указаны логин и пароль: ‘site’

Так вот они подходят, что странно, учитывая что я их нигде не вводил ранее.

   790th

13 — 23.08.13 — 10:21

(0) кстати объявление «new SoapClient» , в соответствии с примером у меня теперь выглядит немного сложнее:

function ПодключитьсяК1С(){

    if (!function_exists(‘is_soap_fault’)){

      print ‘Не настроен web сервер. Не найден модуль php-soap.’;

      return false;

    }

    try {

      $Клиент1С = new SoapClient(‘http://127.0.0.1/otladka/ws/lyay.1cws?wsdl’,

                               array(‘login’          => ‘site’,

                                     ‘password’       => ‘site’,

                                     ‘soap_version’   => SOAP_1_2,

                                     ‘cache_wsdl’     => WSDL_CACHE_NONE, //WSDL_CACHE_MEMORY, //, WSDL_CACHE_NONE, WSDL_CACHE_DISK or WSDL_CACHE_BOTH

                                     ‘exceptions’     => true,

                                     ‘trace’          => 1));

    }catch(SoapFault $e) {

      trigger_error(‘Ошибка подключения или внутренняя ошибка сервера. Не удалось связаться с базой 1С.’, E_ERROR);

      var_dump($e);

    }

    //echo ‘Раз<br>’;

    if (is_soap_fault(Клиент1С)){

      trigger_error(‘Ошибка подключения или внутренняя ошибка сервера. Не удалось связаться с базой 1С.’, E_ERROR);

      return false;

    }

    return $Клиент1С;

  }

  

790th

14 — 23.08.13 — 10:48

(12) это всего лишь пользователь бд

I am using the BingAds library for PHP.

I often get long periods of time where the API eventually fails.

The error messages I get are usually:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://api.bingads.microsoft.com/Api/Advertiser/CampaignManagement/V9/CampaignManagementService.svc?singleWsdl' : failed to load external entity "https://api.bingads.microsoft.com/Api/Advertiser/CampaignManagement/V9/CampaignManagementService.svc?singleWsdl" in [...] bingads/ClientProxy.php:183 Stack trace: #0 [...] bingads/ClientProxy.php(183): SoapClient->SoapClient('https://api.bin...', Array) #1 [...] bingads/ClientProxy.php(66): BingAdsProxyClientProxy->GetProxy('https://api.bin...') #2 [...] BingAdsProxyClientProxy::ConstructWithAccountId('https://api.bin...', '[...]', '[...]', '[...]', '[...]', NULL) [...]

Warning: DOMDocument::load(https://api.bingads.microsoft.com/Api/Advertiser/CampaignManagement/V9/CampaignManagementService.svc?singleWsdl) [domdocument.load]: failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in [...]/bingads/ClientProxy.php on line 98
Warning: SoapHeader::SoapHeader() [soapheader.soapheader]: Invalid namespace in [...]/bingads/ClientProxy.php on line 128

Warning: SoapHeader::SoapHeader() [soapheader.soapheader]: Invalid namespace in [...]/bingads/ClientProxy.php on line 134

Warning: SoapHeader::SoapHeader() [soapheader.soapheader]: Invalid namespace in [...]bingads/ClientProxy.php on line 140

Warning: SoapHeader::SoapHeader() [soapheader.soapheader]: Invalid namespace in [...]/bingads/ClientProxy.php on line 146

Warning: SoapHeader::SoapHeader() [soapheader.soapheader]: Invalid namespace in [...]bingads/ClientProxy.php on line 152

Warning: SoapHeader::SoapHeader() [soapheader.soapheader]: Invalid namespace in [...]/bingads/ClientProxy.php on line 158

Fatal error: Uncaught SoapFault exception: [s:Server] Invalid client data. Check the SOAP fault details for more information

The second series of warnings and fatal error comes after 6 or 7 successful API calls to retrieve AdGroup and Ad data for a series of AdGroups.  Eventually it fails.  

Then it will work for several days, then have several days of getting errors again.

Any ideas?

Issue summary:
with the same Drupal 622 configuration I have three different behaviours, please help me on finding the right settings.
In all cases I enable only drupal minimum modules (ctools, services, server_soap current dev versions) and set only one endpoint enabling system and user defaults resources
the same test script is run against all urls.
the test script connects and login to the service. very basic.

Issue details:
Installation 1: localhost, soap services: wsdl is properly downloaded and the test script works fine
Installation 2: bitnami drupal virtual appliance on a LAN physical server. Everything works fine as locally.
Installation 3: bitnami drupal virtual appliance hosted by Amazon: firewall rules enable tcp port 80 from everywhere.
I CAN download the wsdl file, but any further request gets this error:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://46.137.153.108/drupal/?q=ws?wsdl’ : failed to load external entity «http://46.137.153.108/drupal/?q=ws?wsdl» in Z:xampphtdocswssitesallDrupal-Services-And-SOAP-testsoap_server_test2.php:26 Stack trace: #0 Z:xampphtdocswssitesallDrupal-Services-And-SOAP-testsoap_server_test2.php(26): SoapClient->__soapCall(‘system_soap_con…’, Array) #1 {main} thrown in Z:xampphtdocswssitesallDrupal-Services-And-SOAP-testsoap_server_test2.php on line 26

Installation 4: hosted service at Aruba.it. any access to the endpoint gives me error 404 page not found.

Conclusions: I am spending a lot of time to develop my application, but I am stalled at this problem. I am also contacting service providers support to get help, in this case it is not clear WHAT I shall ask as according to my knowledge SOAP requests are passed over a standard http protocol.
I may also have introduced some errors in the configuration as I started with services 1.x, 2.x and then 3.x, so I am really confused. This is why I am testing a very basic configuration.
here below the testing script:

$wsdl = "http://46.137.153.108/drupal/ws?wsdl";

$options = array(
  'cache_wsdl' => 0,
);

$client = new SoapClient($wsdl, $options);
echo '<pre>'.print_r($client,true).'</pre>';
$response = $client->__soapCall('system_soap_connect', array());
echo '<pre>'.print_r($response,true).'</pre>';

$session_id = $response->sessid;
$response = $client->__soapCall('user_soap_login', array('administrator', 'xxxxxx'));
echo '<pre>'.print_r($response,true).'</pre>';

$session_id = $response->sessid;

if ($session_id) {
$response = $client->__soapCall('system_soap_get_variable', array('site_info','x'));
echo '<pre>'.print_r($response,true).'</pre>';

}
else {
 print 'Could not authenticate user';
}
print "n";

Понравилась статья? Поделить с друзьями:
  • Uncaught runtimeerror memory access out of bounds как исправить
  • Uncaught referenceerror jquery is not defined как исправить
  • Uncaught in promise typeerror fullscreen error
  • Uncaught in promise error recaptcha has already been rendered in this element
  • Uncaught in promise error could not establish connection receiving end does not exist