Эта проблема убивала меня весь день.
У меня есть клиентская веб-служба https: // * .asmx? WSDL с базовой HTTP-аутентификацией ..
Если я использую SoapUI для подключения к веб-сервису, все работает отлично, без каких-либо ошибок ..
Проблема в том, что когда я переключаюсь на PHP ...
Мне удалось подключиться к нему, и я могу получить список функций с сервера, используя расширение soapclient для php (я использую PHP 5.3.0).
Когда я пытаюсь вызвать функцию с помощью расширения soapclient для PHP, я получаю следующую ошибку:
Неустранимая ошибка: Неперехваченное исключение SoapFault: [HTTP] Ошибка при получении заголовков http в C: \ www \ xpto_Atestes \ soapclient.php: 26 Трассировка стека: # 0 [внутренняя функция]:> SoapClient -> __ doRequest ('* em> ** ... ',' http: // * *** ... ', 1, 0) # 1> C: \ www \ xpto_Atestes \ soapclient.php (26): SoapClient -> __ soapCall ('login', Array) # 2 {main}> брошено в C: \ www \ xpto_Atestes \ soapclient.php в строке 26
Более четкая ошибка (когда я делаю print_r результата вызова):
[faultstring] => Ошибка при получении заголовков http
[код ошибки] => HTTP
Со следующими отправляемыми заголовками:
POST /< sizes* sizes.asmx HTTP / 1.1 Host: * .pt Подключение: Keep-Alive User-Agent: > PHP-SOAP / 5.3.0 Content-Type: text / xml; charset = utf-8 SOAPAction: "http: // * * / Login"> Content-Length: 264 Авторизация: Базовая AUTHSECRETPASS
Я называю это так:
$ soapParams = array ('login' => 'HTTP_LOGIN',
'password' => 'HTTP_PASS',
'authentication' => SOAP_AUTHENTICATION_BASIC,
'trace' => 1,
' exceptions '=> 0
);
$ client = new SoapClient ("https: // * *** .asmx? WSDL", $ soapParams ); echo "Подключено
"; $ params = array ('account' => '', 'msisdn' => 'NUMBER', 'password' => 'PASSWORD'); $ result = $ client -> __ soapCall ("логин", $ params);
После некоторого поиска в Google и попыток выяснить, в чем может быть проблема, я переключился на nusoap ... который, к моему несчастью, также выдал ошибку:
Ошибка
Ошибка HTTP: истекло время чтения заголовков сокетом
Запрос
POST /< 1x** sizes.asmx Хост HTTP / 1.0: * .pt Пользовательский агент: NuSOAP / 0.9. 5 (1.123) Content-Type: text / xml; charset = ISO-8859-1 SOAPAction: "http: // * *** / Login" Авторизация: Базовая AUTHSECRETPASS Длина содержимого: 481
НОМЕР ПАРОЛЬ
Ответ
Я называю это так:
$ client = new nusoap_client ("https: // * * .asmx? WSDL", true);
$ client-> setCredentials ('HTTPUSER', ' HTTPPASS ',' basic ');
$ params = array (' account '=>' ',' msisdn '=>' NUMBER ',' password '=>' PASSWORD ');
$ result = $ client-> call ('Логин', $ params);
С помощью nusoap я также попытался включить расширение curl для выполнения вызовов:
$ client-> setUseCurl (правда);
Но не тут-то было, продолжал выдавать ошибку:
Ошибка HTTP: ОШИБКА cURL: 56: Сбой при получении данных с однорангового URL: http: // * ** * ** * em> ** .asmx
content_type:
http_code: 0
header_size: 0
request_size: 750
filetime: -1
ssl_verify_result: 0
redirect_count : 0
total_time: 21.015
namelookup_time: 0
connect_time: 0
pretransfer_time: 0
size_upload: 462
size_download: 0
speed_download: 0
speed_upload: 21
download_content_length: -1
upload_content_length: -1
starttransfer_time: 0
redirect_time: 0
Я на 100% уверен, что с веб-сервисом все в порядке, если я могу без проблем вызвать его из SoapUI, я не понимаю, почему я не могу вызвать его из PHP.
Я ралли, не знаю, что еще могу ... Думаю, все перепробовала ...
Изменить: я только что попробовал другой класс Soap для PHP, на этот раз от Zend ..
Результат:
Неустранимая ошибка: неперехваченное исключение SoapFault: [WSDL] SOAP-ERROR: синтаксический анализ WSDL: не удалось загрузить из https: // * * .asmx? WSDL: не удалось для загрузки внешнего объекта "https: // * .asmx? WSDL" в C: \ www \ xpto_Atestes \ Zend \ Soap \ Client \ Common.php: 51 Трассировка стека :
# 0 C: \ www \ xpto_Atestes \ Zend \ Soap \ Client \ Common.php (51): SoapClient-> SoapClient ('https: // * * strong> ... ', массив)
# 1 C: \ www ** * * _Atestes \ Zend \ Soap \ Client.php (1032): Zend_Soap_Client_Common -> __ construct (Массив, 'https: // * * ...', Массив)
# 2 C: \ www ** ** _Atestes \ Zend \ Soap \ Client.php (1188): Zend_Soap_Client -> _ initSoapClientObject ()
# 3 C: \ www ** * _Atestes \ Zend \ Soap \ Client.php (1112): Zend_Soap_Client-> getSoapClient () # 4 [внутренняя функция]: Zend_Soap_Client -> __ call ('Login', Array)
# 5 C: \ www ** ** _Atestes \ zend.php (28): Zend_Soap_Client-> Логин (массив)
# 6 {ma in} добавлено