Иногда не удается вызвать веб-службу.
Эта проблема происходит все время.
В чем может быть проблема?
Error:
SoapFault exception: [HTTP] Could not connect to host in
0 [internal function]: SoapClient->__doRequest('<?xml version="...', http://.', '', 1, 0)
Ответ 1
Проблема решена. Проблема заключается в кеше
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
Ответ 2
Я добавляю свой комментарий для полноты, поскольку перечисленные здесь решения не помогли мне. На PHP 5.6 SoapClient делает первый вызов указанного URL WSDL в SoapClient::SoapClient
, а после подключения к нему и получения результата он пытается подключиться к WSDL, указанному в результате:
<soap:address location="http://"/>
И вызов завершается с ошибкой Could not connect to host
, если WSDL отличается от той, которую вы указали в SoapClient::SoapClient
, и недоступен (мой случай был SoapUI, используя http://host.local/).
Поведение в PHP 5.4 отличается и оно всегда использует WSDL в SoapClient::SoapClient
.
Ответ 3
Хост либо работает, либо очень медленно реагирует. Если он медленно реагирует, вы можете попытаться увеличить время ожидания с помощью параметра connection_timeout
или с помощью параметра default_socket_timeout
и посмотреть, уменьшает ли это ошибки.
http://www.php.net/manual/en/soapclient.soapclient.php
http://www.php.net/manual/en/filesystem.configuration.php#ini.default-socket-timeout
Вы также можете включить обработку ошибок, поскольку zanlok указал на повторную попытку несколько раз. Если у вас есть пользователи, которые действительно ждут этих SOAP-вызовов, вам нужно будет поставить их в очередь и обработать их в фоновом режиме и уведомить пользователя, когда они будут завершены.
Ответ 4
в файле php.ini, который управляет кэшем доступа wsdl, есть раздел конфигурации soap, может отображаться как:
[soap]
; Enables or disables WSDL caching feature.
soap.wsdl_cache_enabled=1 ;
Sets the directory name where SOAP extension will put cache files.
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used ; instead of original one.
soap.wsdl_cache_ttl=86400
Если кеш файл wsdl включен, это может вызвать эту проблему при изменении URI wsdl в php-коде.
в этом примере вы можете просто удалить начало файла с помощью wsdl-
в директории /tmp
.
или вы просто установите soap.wsdl_cache_enabled=0;
и soap.wsdl_cache_ttl=0;
PHP будет получать файл wsdl каждый раз, когда вы посещаете страницу.
Ответ 5
неправильно настроенный сервис оставляет пространство имен по умолчанию с tempuri.org
Это означает, что соединение с wsdl будет работать, но вызов функции не удастся.
Stacktrace:
SoapClient->__doRequest(‘http://example.com…’, ‘http://tempuri.org….’, 2, 0)
Чтобы исправить это, вы должны явно указать местоположение, используя __setLocation()
$this->soapClient = new SoapClient(WS_URL);
$this->soapClient->__setLocation(WS_URL);
Ответ 6
Я сам попал в эту проблему, и после долгого рытья я в конце концов нашел эту ошибку для ubuntu:
https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371
в частности
https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371/comments/62
openssl s_client -connect site.tld:443
не удалось, однако openssl s_client -tls1 -connect site.tld:443
дал успех. В моем частном случае часть результата включала
New, TLSv1/SSLv3, Cipher is RC4-MD5
, поэтому я правильно установил значение ssl/cipher для php-контекста.
Ответ 7
В нашем случае это была проблема переговоров с шифрами. Мы получили эту ошибку случайно. Мы решили нашу проблему с помощью шифра следующим образом:
$soapClient = new SoapClient('http://example.com/soap.asmx?wsdl',array("stream_context" => stream_context_create(array('ssl' => array('ciphers'=>'AES256-SHA')))));
Похоже, PHP не согласовывал одни и те же шифры при каждом вызове службы.
Ответ 8
В моем случае он работал после подключения к wsdl, используйте функцию __setLocation()
, чтобы определить местоположение снова, потому что вызов завершился с ошибкой:
Не удалось подключиться к хосту
Это происходит, если WSDL отличается от указанного в SoapClient::SoapClient
.
Ответ 9
Кажется, что ошибка SoapFault exception: Could not connect to host
может быть вызвана несколькими разными вещами. В моем случае это не было вызвано прокси-сервером, брандмауэром или DNS (у меня на самом деле было соединение SOAP с той же машины, что и с помощью nusoap без любая специальная настройка).
Наконец, я обнаружил, что это было вызвано недопустимым pem
файлом, на который я ссылался в опции local_cert
в моем конструкторе SoapClient.
Решение:
Когда я удалил цепочку сертификатов из файла pem
, поэтому только содержал сертификат и закрытый ключ, вызовы SOAP начали проходить.
Ответ 10
Это работа для меня
$opts = array(
'ssl' => array('verify_peer' => false, 'verify_peer_name' => false)
);
if (!isset($this->soap_client)) {
$this->soap_client = new SoapClient($this->WSDL, array(
'soap_version' => $this->soap_version,
'location' => $this->URL,
'trace' => 1,
'exceptions' => 0,
'stream_context' => stream_context_create($opts)
));
Ответ 11
Наконец-то я нашел причину, потому что ее библиотека не может найти набор СА в вашей системе.
PHP >= v5.6 автоматически устанавливает verify_peer в true по умолчанию. Однако не все системы имеют известный набор СА на диске.
Вы можете попробовать одну из следующих процедур:
1.Если у вас есть файл CA в вашей системе, установите openssl.cafile
или curl.cainfo
в свой php.ini
путь к вашему файлу CA.
2.Установите свое местоположение файла CA CA
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($cHandler, CURLOPT_CAINFO, $path-of-your-ca-file);
3.disabled verify_peer
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Ответ 12
Для меня это проблема DNS. Мои серверы имен VPS исчезли, поэтому я переключился на Google, отредактировав файл /etc/resolv.conf следующим образом:
сервер имен 8.8.8.8
nameserver 8.8.4.4
Ответ 13
Если у вас есть брандмауэр на вашем сервере, обязательно откройте порт, используемый SOAP.
В моем случае мне пришлось открыть порт 1664.
iptables -t filter -A INPUT -p tcp --dport 1664 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 1664 -j ACCEPT
Ответ 14
Если решение ujava не может вам помочь, вы можете попробовать использовать try/catch, чтобы поймать этот фатальный, это отлично работает на меня.
try{
$res = $client->__call('LineStopQueryJson',array('Parameters' => $params));
}catch(SoapFault $e){
print_r($client);
}
Ответ 15
В моем случае служебный адрес в wsdl неверен.
Мой wsdl url.
https://myweb.com:4460/xxx_webservices/services/ABC.ABC?wsdl
Но адрес службы в этом xml-результате.
<soap:address location="http://myweb.com:8080/xxx_webservices/services/ABC.ABC/"/>
Я просто сохраняю этот xml в локальном файле и меняю адрес службы на.
<soap:address location="https://myweb.com:4460/xxx_webservices/services/ABC.ABC/"/>
Удачи.
Ответ 16
Со мной эта проблема в базовом адресе в app.config службы WCF:
Когда я использовал:
<baseAddresses><add baseAddress="http://127.0.0.1:9022/Service/GatewayService"/> </baseAddresses>
это нормально, если вы используете .net для подключения к общедоступному ip или домену.
Но когда вы используете PHP SoapClient для подключения к «http://[online ip]:9022/Service/GatewayService
«, он генерирует исключение «Coulod not connect to host»
Я изменил baseAddress на [онлайн-ip]: 9022 и все нормально.
Ответ 17
Для тех, кто так же, как и я, боролся с консольной командой laravel artisan, которая делает много запросов к одному и тому же wsdl внешнего мыльного сервера, а затем через некоторое время завершается с ошибкой Could not connect to host
error.
Проблема была в том, что я создавал новый экземпляр SoapClient
каждый раз перед тем, как был сделан запрос. Не делай этого. Создайте его один раз и сделайте каждый запрос от одного и того же клиента.
Надеюсь, поможет.
Ответ 18
У меня была плохая конфигурация php.ini. Проверьте путь и срок действия сертификата…
[openssl]
openssl.cafile = "C:/good/phpath/ca-bundle.crt"
Поскольку мой новый SoapClient ($ wsdl) был https!
Ответ 19
Чтобы помочь другим людям, столкнувшимся с этой ошибкой, URL-адрес в <soap:address location="https://some.url"/>
имел недопустимый сертификат и вызвал ошибку.
Ответ 20
Для меня это проблема в службе httpd
(Fedora 24). Простой перезапуск сделал трюк:
sudo service httpd restart
Ответ 21
Если соединение через SSL, может быть проблема сервера, а не клиента (это мой случай).
В версиях PHP выше 5.6 и 7 важно проверить CipherSuite, используемый в сертификате сервера. Существует полный список шифров, разрешенных этими версиями, и полный список шифров, которых нет в данной веб-ссылке: https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_Ciphersuite.
Если используемый шифр недопустим (это устаревший алгоритм), SoapClient получает сообщение «Не удалось подключиться к хосту», и в нем больше нет следов.
Используемый шифр может быть проверен такими клиентами, как SoapUI, например, в разделе «Информация SSL».
В интернете нет ветки, посвященной этой теме.
Проверьте это тоже: http://php.net/manual/en/migration56.openssl.php
Ответ 22
Для меня это была проблема с сертификатом. Следующее сработало у меня
$context = stream_context_create([
'ssl' => [
// set some SSL/TLS specific options
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);
$client = new SoapClient(null, [
'location' => 'https://...',
'uri' => '...',
'stream_context' => $context
]);
Ответ 23
Проверка версии помогла мне OpenSSL. OpenSSL_1_0_1f не поддерживается TSLv.1_2!
Проверьте версию и совместимость с TSLv.1_2 на github openssl/openssl
, И восстановите свой сертификат с новым openssl
openssl pkcs12 -in path.p12 -out newfile.pem
P.S. Я не знаю, в чем они были минус, но это решение действительно поможет.
Ответ 24
Это скорее всего относится к проблеме подключения. Это может быть либо то, что ваше интернет-соединение было недоступно, либо веб-сервис, который вы пытаетесь использовать, был недоступен. Я предлагаю использовать эту услугу, чтобы узнать, находится ли веб-служба в сети или нет: http://downforeveryoneorjustme.com/
Sometimes fail to call the web service.
This problem happens all the time.
What could be the problem?
Error:
SoapFault exception: [HTTP] Could not connect to host in
0 [internal function]: SoapClient->__doRequest('<?xml version="...', http://.', '', 1, 0)
asked Nov 30, 2010 at 21:29
Ответ 1
Проблема решена. Проблема заключается в кеше
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
Ответ 2
Я добавляю свой комментарий для полноты, поскольку перечисленные здесь решения не помогли мне. На PHP 5.6 SoapClient делает первый вызов указанного URL WSDL в SoapClient::SoapClient
, а после подключения к нему и получения результата он пытается подключиться к WSDL, указанному в результате:
<soap:address location="http://"/>
И вызов завершается с ошибкой Could not connect to host
, если WSDL отличается от той, которую вы указали в SoapClient::SoapClient
, и недоступен (мой случай был SoapUI, используя http://host.local/).
Поведение в PHP 5.4 отличается и оно всегда использует WSDL в SoapClient::SoapClient
.
Ответ 3
Хост либо работает, либо очень медленно реагирует. Если он медленно реагирует, вы можете попытаться увеличить время ожидания с помощью параметра connection_timeout
или с помощью параметра default_socket_timeout
и посмотреть, уменьшает ли это ошибки.
http://www.php.net/manual/en/soapclient.soapclient.php
http://www.php.net/manual/en/filesystem.configuration.php#ini.default-socket-timeout
Вы также можете включить обработку ошибок, поскольку zanlok указал на повторную попытку несколько раз. Если у вас есть пользователи, которые действительно ждут этих SOAP-вызовов, вам нужно будет поставить их в очередь и обработать их в фоновом режиме и уведомить пользователя, когда они будут завершены.
Ответ 4
в файле php.ini, который управляет кэшем доступа wsdl, есть раздел конфигурации soap, может отображаться как:
[soap]
; Enables or disables WSDL caching feature.
soap.wsdl_cache_enabled=1 ;
Sets the directory name where SOAP extension will put cache files.
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used ; instead of original one.
soap.wsdl_cache_ttl=86400
Если кеш файл wsdl включен, это может вызвать эту проблему при изменении URI wsdl в php-коде.
в этом примере вы можете просто удалить начало файла с помощью wsdl-
в директории /tmp
.
или вы просто установите soap.wsdl_cache_enabled=0;
и soap.wsdl_cache_ttl=0;
PHP будет получать файл wsdl каждый раз, когда вы посещаете страницу.
Ответ 5
неправильно настроенный сервис оставляет пространство имен по умолчанию с tempuri.org
Это означает, что соединение с wsdl будет работать, но вызов функции не удастся.
Stacktrace:
SoapClient->__doRequest(‘http://example.com…’, ‘http://tempuri.org….’, 2, 0)
Чтобы исправить это, вы должны явно указать местоположение, используя __setLocation()
$this->soapClient = new SoapClient(WS_URL);
$this->soapClient->__setLocation(WS_URL);
Ответ 6
Я сам попал в эту проблему, и после долгого рытья я в конце концов нашел эту ошибку для ubuntu:
https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371
в частности
https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371/comments/62
openssl s_client -connect site.tld:443
не удалось, однако openssl s_client -tls1 -connect site.tld:443
дал успех. В моем частном случае часть результата включала
New, TLSv1/SSLv3, Cipher is RC4-MD5
, поэтому я правильно установил значение ssl/cipher для php-контекста.
Ответ 7
В нашем случае это была проблема переговоров с шифрами. Мы получили эту ошибку случайно. Мы решили нашу проблему с помощью шифра следующим образом:
$soapClient = new SoapClient('http://example.com/soap.asmx?wsdl',array("stream_context" => stream_context_create(array('ssl' => array('ciphers'=>'AES256-SHA')))));
Похоже, PHP не согласовывал одни и те же шифры при каждом вызове службы.
Ответ 8
В моем случае он работал после подключения к wsdl, используйте функцию __setLocation()
, чтобы определить местоположение снова, потому что вызов завершился с ошибкой:
Не удалось подключиться к хосту
Это происходит, если WSDL отличается от указанного в SoapClient::SoapClient
.
Ответ 9
Кажется, что ошибка SoapFault exception: Could not connect to host
может быть вызвана несколькими разными вещами. В моем случае это не было вызвано прокси-сервером, брандмауэром или DNS (у меня на самом деле было соединение SOAP с той же машины, что и с помощью nusoap без любая специальная настройка).
Наконец, я обнаружил, что это было вызвано недопустимым pem
файлом, на который я ссылался в опции local_cert
в моем конструкторе SoapClient.
Решение:
Когда я удалил цепочку сертификатов из файла pem
, поэтому только содержал сертификат и закрытый ключ, вызовы SOAP начали проходить.
Ответ 10
Это работа для меня
$opts = array(
'ssl' => array('verify_peer' => false, 'verify_peer_name' => false)
);
if (!isset($this->soap_client)) {
$this->soap_client = new SoapClient($this->WSDL, array(
'soap_version' => $this->soap_version,
'location' => $this->URL,
'trace' => 1,
'exceptions' => 0,
'stream_context' => stream_context_create($opts)
));
Ответ 11
Наконец-то я нашел причину, потому что ее библиотека не может найти набор СА в вашей системе.
PHP >= v5.6 автоматически устанавливает verify_peer в true по умолчанию. Однако не все системы имеют известный набор СА на диске.
Вы можете попробовать одну из следующих процедур:
1.Если у вас есть файл CA в вашей системе, установите openssl.cafile
или curl.cainfo
в свой php.ini
путь к вашему файлу CA.
2.Установите свое местоположение файла CA CA
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($cHandler, CURLOPT_CAINFO, $path-of-your-ca-file);
3.disabled verify_peer
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Ответ 12
Для меня это проблема DNS. Мои серверы имен VPS исчезли, поэтому я переключился на Google, отредактировав файл /etc/resolv.conf следующим образом:
сервер имен 8.8.8.8
nameserver 8.8.4.4
Ответ 13
Если у вас есть брандмауэр на вашем сервере, обязательно откройте порт, используемый SOAP.
В моем случае мне пришлось открыть порт 1664.
iptables -t filter -A INPUT -p tcp --dport 1664 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 1664 -j ACCEPT
Ответ 14
Если решение ujava не может вам помочь, вы можете попробовать использовать try/catch, чтобы поймать этот фатальный, это отлично работает на меня.
try{
$res = $client->__call('LineStopQueryJson',array('Parameters' => $params));
}catch(SoapFault $e){
print_r($client);
}
Ответ 15
В моем случае служебный адрес в wsdl неверен.
Мой wsdl url.
https://myweb.com:4460/xxx_webservices/services/ABC.ABC?wsdl
Но адрес службы в этом xml-результате.
<soap:address location="http://myweb.com:8080/xxx_webservices/services/ABC.ABC/"/>
Я просто сохраняю этот xml в локальном файле и меняю адрес службы на.
<soap:address location="https://myweb.com:4460/xxx_webservices/services/ABC.ABC/"/>
Удачи.
Ответ 16
Со мной эта проблема в базовом адресе в app.config службы WCF:
Когда я использовал:
<baseAddresses><add baseAddress="http://127.0.0.1:9022/Service/GatewayService"/> </baseAddresses>
это нормально, если вы используете .net для подключения к общедоступному ip или домену.
Но когда вы используете PHP SoapClient для подключения к «http://[online ip]:9022/Service/GatewayService
«, он генерирует исключение «Coulod not connect to host»
Я изменил baseAddress на [онлайн-ip]: 9022 и все нормально.
Ответ 17
Для тех, кто так же, как и я, боролся с консольной командой laravel artisan, которая делает много запросов к одному и тому же wsdl внешнего мыльного сервера, а затем через некоторое время завершается с ошибкой Could not connect to host
error.
Проблема была в том, что я создавал новый экземпляр SoapClient
каждый раз перед тем, как был сделан запрос. Не делай этого. Создайте его один раз и сделайте каждый запрос от одного и того же клиента.
Надеюсь, поможет.
Ответ 18
У меня была плохая конфигурация php.ini. Проверьте путь и срок действия сертификата…
[openssl]
openssl.cafile = "C:/good/phpath/ca-bundle.crt"
Поскольку мой новый SoapClient ($ wsdl) был https!
Ответ 19
Чтобы помочь другим людям, столкнувшимся с этой ошибкой, URL-адрес в <soap:address location="https://some.url"/>
имел недопустимый сертификат и вызвал ошибку.
Ответ 20
Для меня это проблема в службе httpd
(Fedora 24). Простой перезапуск сделал трюк:
sudo service httpd restart
Ответ 21
Если соединение через SSL, может быть проблема сервера, а не клиента (это мой случай).
В версиях PHP выше 5.6 и 7 важно проверить CipherSuite, используемый в сертификате сервера. Существует полный список шифров, разрешенных этими версиями, и полный список шифров, которых нет в данной веб-ссылке: https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_Ciphersuite.
Если используемый шифр недопустим (это устаревший алгоритм), SoapClient получает сообщение «Не удалось подключиться к хосту», и в нем больше нет следов.
Используемый шифр может быть проверен такими клиентами, как SoapUI, например, в разделе «Информация SSL».
В интернете нет ветки, посвященной этой теме.
Проверьте это тоже: http://php.net/manual/en/migration56.openssl.php
Ответ 22
Для меня это была проблема с сертификатом. Следующее сработало у меня
$context = stream_context_create([
'ssl' => [
// set some SSL/TLS specific options
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);
$client = new SoapClient(null, [
'location' => 'https://...',
'uri' => '...',
'stream_context' => $context
]);
Ответ 23
Проверка версии помогла мне OpenSSL. OpenSSL_1_0_1f не поддерживается TSLv.1_2!
Проверьте версию и совместимость с TSLv.1_2 на github openssl/openssl
, И восстановите свой сертификат с новым openssl
openssl pkcs12 -in path.p12 -out newfile.pem
P.S. Я не знаю, в чем они были минус, но это решение действительно поможет.
Ответ 24
Это скорее всего относится к проблеме подключения. Это может быть либо то, что ваше интернет-соединение было недоступно, либо веб-сервис, который вы пытаетесь использовать, был недоступен. Я предлагаю использовать эту услугу, чтобы узнать, находится ли веб-служба в сети или нет: http://downforeveryoneorjustme.com/
Sometimes fail to call the web service.
This problem happens all the time.
What could be the problem?
Error:
SoapFault exception: [HTTP] Could not connect to host in
0 [internal function]: SoapClient->__doRequest('<?xml version="...', http://.', '', 1, 0)
asked Nov 30, 2010 at 21:29
3
The problem was solved.The problem is the cache
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
answered Dec 1, 2010 at 11:25
ujavaujava
1,7965 gold badges19 silver badges24 bronze badges
5
I am adding my comment for completeness, as the solutions listed here did not help me. On PHP 5.6, SoapClient makes the first call to the specified WSDL URL in SoapClient::SoapClient
and after connecting to it and receiving the result, it tries to connect to the WSDL specified in the result in:
<soap:address location="http://"/>
And the call fails with error Could not connect to host
if the WSDL is different than the one you specified in SoapClient::SoapClient
and is unreachable (my case was SoapUI using http://host.local/).
The behaviour in PHP 5.4 is different and it always uses the WSDL in SoapClient::SoapClient
.
answered Dec 4, 2014 at 15:51
VolenDVolenD
3,59218 silver badges23 bronze badges
4
A misconfigured service leaves the default namespace with tempuri.org
This means the connection to the wsdl will work, but the function call will fail.
Stacktrace:
SoapClient->__doRequest(‘http://example.com…’, ‘http://tempuri.org….’, 2, 0)
To remediate this, you must explicitly set the location using __setLocation()
$this->soapClient = new SoapClient(WS_URL);
$this->soapClient->__setLocation(WS_URL);
answered May 8, 2018 at 13:42
MediaFormatMediaFormat
3393 silver badges10 bronze badges
2
This work for me
$opts = array(
'ssl' => array('verify_peer' => false, 'verify_peer_name' => false)
);
if (!isset($this->soap_client)) {
$this->soap_client = new SoapClient($this->WSDL, array(
'soap_version' => $this->soap_version,
'location' => $this->URL,
'trace' => 1,
'exceptions' => 0,
'stream_context' => stream_context_create($opts)
));
answered May 13, 2018 at 20:40
1
there is a soap config section in your php.ini file, which control the wsdl access cache, may be shown as:
[soap]
; Enables or disables WSDL caching feature.
soap.wsdl_cache_enabled=1 ;
Sets the directory name where SOAP extension will put cache files.
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used ; instead of original one.
soap.wsdl_cache_ttl=86400
if wsdl file cache is enabled, it may cause this problem when changing wsdl URI in php code.
in this example, you can just delete file start with wsdl-
under /tmp
directory.
or you just set soap.wsdl_cache_enabled=0;
and soap.wsdl_cache_ttl=0;
PHP will fetch the wsdl file every-time you visit the page.
Emil
7,22017 gold badges76 silver badges135 bronze badges
answered Oct 25, 2012 at 8:24
curzduffcurzduff
911 silver badge2 bronze badges
In our case, it was a Ciphers negotiation problem. We were getting this error randomly. We solved our problem by forcing a Cipher like this:
$soapClient = new SoapClient ('http://example.com/soap.asmx?wsdl',
array (
"stream_context" => stream_context_create (
array (
'ssl' => array (
'ciphers'=>'AES256-SHA'
)
)
)
)
);
Looks like PHP wasn’t negotiating the same Ciphers at each service call.
atiruz
2,75626 silver badges36 bronze badges
answered Jan 31, 2017 at 16:27
MaxPMaxP
3255 silver badges10 bronze badges
2
In my case it worked after the connection to the wsdl, use the function __setLocation()
to define the location again because the call fails with the error:
Could not connect to the host
This happens if the WSDL is different to the one specified in SoapClient::SoapClient
.
Stephen Rauch♦
47.5k31 gold badges106 silver badges135 bronze badges
answered Nov 3, 2017 at 12:56
It seems the error SoapFault exception: Could not connect to host
can be caused be several different things. In my cased it wasn’t caused by proxy, firewall or DNS (I actually had a SOAP connection from the same machine working using nusoap without any special setup).
Finally I found that it was caused by an invalid pem
file which I referenced in the local_cert
option in my SoapClient contructor.
Solution:
When I removed the certificate chain from the pem
file, so it only contained certificate and private key, the SOAP calls started going through.
answered Oct 30, 2014 at 14:58
JacobJacob
9441 gold badge11 silver badges20 bronze badges
3
For me it was a certificate problem. Following worked for me
$context = stream_context_create([
'ssl' => [
// set some SSL/TLS specific options
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);
$client = new SoapClient(null, [
'location' => 'https://...',
'uri' => '...',
'stream_context' => $context
]);
answered Sep 9, 2019 at 14:33
2
In my case service address in wsdl is wrong.
My wsdl url is.
https://myweb.com:4460/xxx_webservices/services/ABC.ABC?wsdl
But service address in that xml result is.
<soap:address location="http://myweb.com:8080/xxx_webservices/services/ABC.ABC/"/>
I just save that xml to local file and change service address to.
<soap:address location="https://myweb.com:4460/xxx_webservices/services/ABC.ABC/"/>
Good luck.
answered Jun 12, 2015 at 8:55
I finally found the reason,its becuse of the library can’t find a CA bundle on your system.
PHP >= v5.6 automatically sets verify_peer to true by default. However, not all systems have a known CA bundle on disk .
You can try one of these procedures:
1.If you have a CA file on your system, set openssl.cafile
or curl.cainfo
in your php.ini
to the path of your CA file.
2.Manually specify your SSL CA file location
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($cHandler, CURLOPT_CAINFO, $path-of-your-ca-file);
3.disabled verify_peer
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Tom Aranda
5,88911 gold badges35 silver badges51 bronze badges
answered Dec 12, 2017 at 3:56
For those who struggled the same as me with laravel artisan console command that makes a lot of requests to same wsdl of external soap server and then after some time fails with Could not connect to host
error.
The problem was because I was creating new SoapClient
instance each time before request was made. Do not do that. Create it once and make each request from the same client.
Hope it helps.
answered Jul 8, 2019 at 9:19
Nick SynevNick Synev
3894 silver badges11 bronze badges
For me it was a DNS issue. My VPS’s nameservers crapped out, so I switched to Google’s by editing my /etc/resolv.conf to be:
nameserver 8.8.8.8
nameserver 8.8.4.4
answered May 5, 2011 at 21:24
If you have a firewall on your server, make sure to open the port used by SOAP.
In my case, I had to open the port 1664.
iptables -t filter -A INPUT -p tcp --dport 1664 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 1664 -j ACCEPT
answered Jun 26, 2012 at 10:44
Nicolas BADIANicolas BADIA
5,5627 gold badges43 silver badges46 bronze badges
3
if ujava’s solution can’t help you,you can try to use try/catch to catch this fatal,this works fine on me.
try{
$res = $client->__call('LineStopQueryJson',array('Parameters' => $params));
}catch(SoapFault $e){
print_r($client);
}
answered Apr 11, 2013 at 6:25
With me, this problem in base Address in app.config of WCF service:
When I’ve used:
<baseAddresses><add baseAddress="http://127.0.0.1:9022/Service/GatewayService"/> </baseAddresses>
it’s ok if use .net to connect with public ip or domain.
But when use PHP’s SoapClient to connect to «http://[online ip]:9022/Service/GatewayService
«, it’s throw exception «Coulod not connect to host»
I’ve changed baseAddress to [online ip]:9022 and everything’s ok.
answered May 16, 2016 at 18:18
Another possible reason for this error is when you are creating and keeping too many connections open.
SoapClient sends the HTTP Header Connection: Keep-Alive
by default (through the constructor option keep_alive
). But if you create a new SoapClient instance for every call in your queue, this will create and keep-open a new connection everytime. If the calls are executed fast enough, you will eventually run into a limit of 1000 open connections or so and this results in SoapFault: Could not connect to host
.
So make sure you create the SoapClient once and reuse it for subsequent calls.
answered Jun 25, 2020 at 8:17
marcovtwoutmarcovtwout
5,2304 gold badges36 silver badges44 bronze badges
I had a bad php.ini configuration. Verify the path and the certificate validity…
[openssl]
openssl.cafile = "C:/good/phpath/ca-bundle.crt"
Because my new SoapClient($wsdl) was https !
answered Nov 27, 2015 at 16:28
Just to help other people who encounter this error, the url in <soap:address location="https://some.url"/>
had an invalid certificate and caused the error.
answered Nov 21, 2016 at 9:06
For me, this was a problem in the httpd
service (Fedora 24). A simple restart did the trick:
sudo service httpd restart
answered Jul 14, 2017 at 11:58
hlscalonhlscalon
7,2844 gold badges33 silver badges40 bronze badges
If the connection is through SSL, could be a problem of server instead of client (it is my case).
In PHP versions greater than 5.6 and 7, is important to check the CipherSuite used in server certificate.
There is a full list of ciphers allowed by this versions and a full list of ciphers that do not in this web link: https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_Ciphersuite
If the cipher used is not allowed (it is a deprecated algorithm), SoapClient receives «Could not connect to host» and there is no more trace about it.
The cipher used can be checked by clients like SoapUI in the section of «SSL Info», for example.
There is no thread forum treating about this in internet.
Check this out, too: http://php.net/manual/en/migration56.openssl.php
answered Jul 5, 2018 at 10:30
ZelkovarZelkovar
1191 silver badge5 bronze badges
In my case the host requires TLS 1.2 so needed to enforce using the crypto_method ssl param.
$client = new SoapClient($wsdl,
array(
'location' => $location,
'keep_alive' => false,
"stream_context" => stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
]
]),
'trace' => 1, // used for debug
)
);
answered May 26, 2020 at 21:56
In my case, disabled SELINUX allow PHP to call my WebService.
I run PHP in FPM with Apache2
SELinux status :
# sestatus
Disable SELinux :
setenforce 0
Enable SELinux :
# setenforce 1
Permanent disable :
edit this file /etc/selinux/config
answered Oct 20, 2020 at 16:16
Version check helped me OpenSSL. OpenSSL_1_0_1f not supported TSLv.1_2 !
Check version and compatibility with TSLv.1_2 on github openssl/openssl
. And regenerate your certificate with new openssl
openssl pkcs12 -in path.p12 -out newfile.pem
P.S I don’t know what they were minus, but this solution will really help.
answered Oct 14, 2019 at 12:23
That most likely refers to a connection issue. It could be either that your internet connection was down, or the web service you are trying to use was down. I suggest using this service to see if the web service is online or not: http://downforeveryoneorjustme.com/
answered Nov 30, 2010 at 22:28
AliAli
260k265 gold badges573 silver badges766 bronze badges
1
При подключении к SMTP серверу, отличному от SMTP сервера виртуального хостинга PS.kz, возникают ошибки вида:
Connection failed. Error #2: stream_socket_client(): unable to connect to ssl://smtp.example.com:465 (Connection refused)
SMTP Error: Could not connect to SMTP host.
Решение:
По умолчанию на виртуальном хостинге закрыт доступ для подключения к сторонним SMTP серверам. Если Вам требуется такой доступ, необходимо написать запрос в техническую поддержку с просьбой открыть доступ.
18 ответов
Проблема решена. Проблема заключается в кеше
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
ujava
01 дек. 2010, в 13:16
Поделиться
Я добавляю свой комментарий для полноты, поскольку перечисленные здесь решения не помогли мне. На PHP 5.6 SoapClient делает первый вызов указанного URL WSDL в SoapClient::SoapClient
, а после подключения к нему и получения результата он пытается подключиться к WSDL, указанному в результате:
<soap:address location="http://"/>
И вызов завершается с ошибкой Could not connect to host
, если WSDL отличается от той, которую вы указали в SoapClient::SoapClient
, и недоступен (мой случай был SoapUI, используя http://host.local/).
Поведение в PHP 5.4 отличается и оно всегда использует WSDL в SoapClient::SoapClient
.
user3584460
04 дек. 2014, в 17:40
Поделиться
Хост либо работает, либо очень медленно реагирует. Если он медленно реагирует, вы можете попытаться увеличить время ожидания с помощью параметра connection_timeout
или с помощью параметра default_socket_timeout
и посмотреть, уменьшает ли это ошибки.
http://www.php.net/manual/en/soapclient.soapclient.php
http://www.php.net/manual/en/filesystem.configuration.php#ini.default-socket-timeout
Вы также можете включить обработку ошибок, поскольку zanlok указал на повторную попытку несколько раз. Если у вас есть пользователи, которые действительно ждут этих SOAP-вызовов, вам нужно будет поставить их в очередь и обработать их в фоновом режиме и уведомить пользователя, когда они будут завершены.
Rob Olmos
30 нояб. 2010, в 23:55
Поделиться
в файле php.ini, который управляет кэшем доступа wsdl, есть раздел конфигурации soap, может отображаться как:
[soap]
; Enables or disables WSDL caching feature.
soap.wsdl_cache_enabled=1 ;
Sets the directory name where SOAP extension will put cache files.
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used ; instead of original one.
soap.wsdl_cache_ttl=86400
Если кеш файл wsdl включен, это может вызвать эту проблему при изменении URI wsdl в php-коде.
в этом примере вы можете просто удалить начало файла с помощью wsdl-
в директории /tmp
.
или вы просто установите soap.wsdl_cache_enabled=0;
и soap.wsdl_cache_ttl=0;
PHP будет получать файл wsdl каждый раз, когда вы посещаете страницу.
curzduff
25 окт. 2012, в 09:23
Поделиться
Кажется, что ошибка SoapFault exception: Could not connect to host
может быть вызвана несколькими разными вещами. В моем случае это не было вызвано прокси-сервером, брандмауэром или DNS (у меня на самом деле было соединение SOAP с той же машины, что и с помощью nusoap без любая специальная настройка).
Наконец, я обнаружил, что это было вызвано недопустимым pem
файлом, на который я ссылался в опции local_cert
в моем конструкторе SoapClient.
Решение:
Когда я удалил цепочку сертификатов из файла pem
, поэтому только содержал сертификат и закрытый ключ, вызовы SOAP начали проходить.
Jacob
30 окт. 2014, в 16:14
Поделиться
Со мной эта проблема в базовом адресе в app.config службы WCF:
Когда я использовал:
<baseAddresses><add baseAddress="http://127.0.0.1:9022/Service/GatewayService"/> </baseAddresses>
это нормально, если вы используете .net для подключения к общедоступному ip или домену.
Но когда вы используете PHP SoapClient для подключения к «http://[online ip]:9022/Service/GatewayService
«, он генерирует исключение «Coulod not connect to host»
Я изменил baseAddress на [онлайн-ip]: 9022 и все нормально.
Nesaver
16 май 2016, в 20:03
Поделиться
Если решение ujava не может вам помочь, вы можете попробовать использовать try/catch, чтобы поймать этот фатальный, это отлично работает на меня.
try{
$res = $client->__call('LineStopQueryJson',array('Parameters' => $params));
}catch(SoapFault $e){
print_r($client);
}
pan7an
11 апр. 2013, в 07:57
Поделиться
Если у вас есть брандмауэр на вашем сервере, обязательно откройте порт, используемый SOAP.
В моем случае мне пришлось открыть порт 1664.
iptables -t filter -A INPUT -p tcp --dport 1664 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 1664 -j ACCEPT
Nicolas BADIA
26 июнь 2012, в 11:14
Поделиться
Для меня это проблема DNS. Мои серверы имен VPS исчезли, поэтому я переключился на Google, отредактировав файл /etc/resolv.conf следующим образом:
сервер имен 8.8.8.8
nameserver 8.8.4.4
David Hadaller
05 май 2011, в 23:11
Поделиться
Наконец-то я нашел причину, потому что ее библиотека не может найти набор СА в вашей системе.
PHP >= v5.6 автоматически устанавливает verify_peer в true по умолчанию. Однако не все системы имеют известный набор СА на диске.
Вы можете попробовать одну из следующих процедур:
1.Если у вас есть файл CA в вашей системе, установите openssl.cafile
или curl.cainfo
в свой php.ini
путь к вашему файлу CA.
2.Установите свое местоположение файла CA CA
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($cHandler, CURLOPT_CAINFO, $path-of-your-ca-file);
3.disabled verify_peer
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Tianya Lan
12 дек. 2017, в 04:22
Поделиться
В моем случае он работал после подключения к wsdl, используйте функцию __setLocation()
, чтобы определить местоположение снова, потому что вызов завершился с ошибкой:
Не удалось подключиться к хосту
Это происходит, если WSDL отличается от указанного в SoapClient::SoapClient
.
Julian Duque Mejía
03 нояб. 2017, в 13:08
Поделиться
Для меня это проблема в службе httpd
(Fedora 24). Простой перезапуск сделал трюк:
sudo service httpd restart
old_mountain
14 июль 2017, в 13:50
Поделиться
В нашем случае это была проблема переговоров Ciphers. Мы получали эту ошибку случайным образом. Мы решили наш problmem, заставив Ciphers следующим образом:
$soapClient = new SoapClient('http://example.com/soap.asmx?wsdl',array("stream_context" => stream_context_create(array('ssl' => array('ciphers'=>'AES256-SHA')))));
Похоже, что PHP не обсуждал одни и те же шифры при каждом вызове службы.
MaxP
31 янв. 2017, в 16:56
Поделиться
Чтобы помочь другим людям, столкнувшимся с этой ошибкой, URL-адрес в <soap:address location="https://some.url"/>
имел недопустимый сертификат и вызвал ошибку.
Cas van Noort
21 нояб. 2016, в 10:04
Поделиться
У меня была плохая конфигурация php.ini. Проверьте путь и срок действия сертификата…
[openssl]
openssl.cafile = "C:/good/phpath/ca-bundle.crt"
Поскольку мой новый SoapClient ($ wsdl) был https!
François Breton
27 нояб. 2015, в 17:01
Поделиться
В моем случае служебный адрес в wsdl неверен.
Мой wsdl url.
https://myweb.com:4460/xxx_webservices/services/ABC.ABC?wsdl
Но адрес службы в этом xml-результате.
<soap:address location="http://myweb.com:8080/xxx_webservices/services/ABC.ABC/"/>
Я просто сохраняю этот xml в локальном файле и меняю адрес службы на.
<soap:address location="https://myweb.com:4460/xxx_webservices/services/ABC.ABC/"/>
Удачи.
Panusit
12 июнь 2015, в 09:12
Поделиться
Это скорее всего относится к проблеме подключения. Это может быть либо то, что ваше интернет-соединение было недоступно, либо веб-сервис, который вы пытаетесь использовать, был недоступен. Я предлагаю использовать эту услугу, чтобы узнать, находится ли веб-служба в сети или нет: http://downforeveryoneorjustme.com/
Click Upvote
30 нояб. 2010, в 23:12
Поделиться
Ещё вопросы
- 1Как отключить завершение кода в отладочной консоли в pycharm?
- 0PHP массив не работает правильно
- 1Правильный способ установки пользовательского плагина VueJs
- 0Скомпилируйте Qt-проект и включите библиотеки Qt
- 1Использование Kotlin Singleton из Java
- 0Изменение непрозрачности Javascript
- 0Как найти дельта-тэту, имеющую два кадра, каждый из которых имеет две точки?
- 0Нечетное поведение IE8 html5shiv
- 0Отметьте флажок, когда ссылка нажата — jquery
- 0Передача / анализ большого количества данных формы в бэкэнд PHP
- 0Object [object Object] не имеет метода
- 0Циклы C ++ — ввод целых чисел до выхода пользователя
- 1бритва PDF становится пустым в MVC4
- 1Как проверить массив на возможные делители?
- 1Ссылка «реакции-роутер-дом» не работает?
- 1Клавиатура Android не отображается при нажатии поля ввода в единстве?
- 1В Google Appmaker не удается получить requestAnimationFrame работает
- 1Неожиданное поведение при программном переключении исключений в Android P и Q Beta
- 1Как использовать Любой между двумя
- 0Возникают трудности с пониманием программы на С ++, смены и
- 0ui.router не работает хорошо в пользовательской директиве
- 1Создать открытую переменную для конкретной формы
- 0Как я могу сместить прокрутку на якорь HTML?
- 0Сравнение пользовательского ввода с некоторыми полями в массиве объектов JSON
- 0(PDO) Сбор конкретных данных из идентификатора
- 1Недостижимая проблема с блоком Catch
- 0Angular JS — получить высоту элемента в директиве перед визуализацией представления
- 0Проверка ввода пользователя с помощью строкового массива
- 0Ява: Разбор Json правильно?
- 1Asp.Net C # MVC Динамические формы (изменение структуры Dom и получение данных на сервер)
- 0Управление ролями в Angularjs для отображения и скрытия вкладок
- 0Каковы некоторые популярные базы данных на основе строк и столбцов?
- 0Как сделать фон в MFC полупрозрачным?
- 0Переписать URL в AngularJS Factory
- 0Присвоение значений массива подмассиву другого массива
- 1Spring @Cacheable метод с нумерацией страниц
- 0Dygraphs: Свернуть / скрыть часть диапазона дат по оси X
- 0анимация ngAnimate не отображается
- 0MySQL базы данных исчезли, когда Docker-контейнер выключен
- 1Проверка кода JavaScript на наличие опечаток в Notepad ++
- 0Я получаю указатель, который свободен, но не выделяется ошибка при запуске make, make test in putty
- 0jquery динамически перемещает строки с помощью .on
- 0Удалить дубликаты комбинаций в MySQL
- 1Плавно отодвинуть твердое тело
- 0Неопределенная ссылка — CodeBlocks
- 0Библиотека Signal R для чата не работает для группы с mvc asp.net
- 1Сортировка фиктивных объектов в мокито
- 0Ширина и высота страницы заполнения холста
- 0Как изменить строки и столбцы таблицы на основе значения параметра выбора идентификатора?
- 0Angular js: динамические значения в виде строки в ng-модели внутри ng-repeat
Иногда не удается вызвать веб-службу.
Эта проблема возникает постоянно.
Проблема была решена. Проблема заключается в кеше
ini_set('soap.wsdl_cache_enabled',0); ini_set('soap.wsdl_cache_ttl',0);
Я добавляю свой комментарий для полноты, поскольку перечисленные здесь решения не помогли мне. На PHP 5.6 SoapClient делает первый вызов указанного URL WSDL в SoapClient::SoapClient
и после подключения к нему и получения результата он пытается подключиться к WSDL, указанному в результате:
<soap:address location="http://"/>
И вызов завершился с ошибкой. Could not connect to host
если WSDL отличается от того, который вы указали в SoapClient::SoapClient
и недоступен (мой случай был SoapUI с использованием http: //host.local/ ).
Поведение в PHP 5.4 отличается и оно всегда использует WSDL в SoapClient::SoapClient
.
в вашем файле php.ini, который управляет кэшем доступа wsdl, может быть показано как:
[soap] ; Enables or disables WSDL caching feature. soap.wsdl_cache_enabled=1 ; Sets the directory name where SOAP extension will put cache files. soap.wsdl_cache_dir="/tmp" ; (time to live) Sets the number of second while cached file will be used ; instead of original one. soap.wsdl_cache_ttl=86400
если кеш-файл wsdl включен, это может вызвать эту проблему при изменении URI wsdl в php-коде. в этом примере вы можете просто удалить файл с wsdl-
/tmp
. или вы просто установите soap.wsdl_cache_enabled=0;
и soap.wsdl_cache_ttl=0;
PHP будет получать файл wsdl каждый раз, когда вы посещаете страницу.
Кажется, ошибка SoapFault exception: Could not connect to host
может быть несколько разных вещей. В моем случае это не было вызвано прокси-сервером, брандмауэром или DNS (у меня на самом деле было соединение SOAP с той же машины, работающей с помощью nusoap без какой-либо специальной настройки).
Наконец, я обнаружил, что это было вызвано недопустимым файлом pem
который я ссылался в опции local_cert
в моем конструкторе SoapClient.
Решение. Когда я удалил цепочку сертификатов из файла pem
, поэтому он содержал только сертификат и закрытый ключ, вызовы SOAP начали проходить.
Для меня это проблема DNS. Мои серверы имен VPS исчезли, поэтому я переключился на Google, отредактировав файл /etc/resolv.conf, чтобы быть: nameserver 8.8.8.8 nameserver 8.8.4.4
Если на вашем сервере установлен брандмауэр, обязательно откройте порт, используемый SOAP.
В моем случае мне пришлось открыть порт 1664.
iptables -t filter -A INPUT -p tcp --dport 1664 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 1664 -j ACCEPT
если решение ujava не может вам помочь, вы можете попытаться использовать try / catch, чтобы поймать этот фатальный, это отлично работает на меня.
try{ $res = $client->__call('LineStopQueryJson',array('Parameters' => $params)); }catch(SoapFault $e){ print_r($client); }
Со мной эта проблема в базовом адресе в app.config службы WCF: когда я использовал:
<baseAddresses><add baseAddress="http://127.0.0.1:9022/Service/GatewayService"/> </baseAddresses>
это нормально, если вы используете .net для подключения к публичному ip или домену.
Но когда вы используете PHP SoapClient для подключения к « http://[online ip]:9022/Service/GatewayService
», это исключение для исключения «Coulod not connect to host»
Я изменил baseAddress на [онлайн-ip]: 9022, и все в порядке.
В моем случае адрес службы в wsdl неверен.
Мой URL-адрес wsdl.
https://myweb.com:4460/xxx_webservices/services/ABC.ABC?wsdl
Но адрес службы в этом xml-результате.
<soap:address location="http://myweb.com:8080/xxx_webservices/services/ABC.ABC/"/>
Я просто сохраняю этот XML-файл в локальном файле и меняю адрес службы.
<soap:address location="https://myweb.com:4460/xxx_webservices/services/ABC.ABC/"/>
Удачи.
У меня была плохая конфигурация php.ini. Проверьте путь и срок действия сертификата …
[openssl] openssl.cafile = "C:/good/phpath/ca-bundle.crt"
Потому что мой новый SoapClient ($ wsdl) был https!
Чтобы помочь другим людям, столкнувшимся с этой ошибкой, URL-адрес в <soap:address location="https://some.url"/>
имел недопустимый сертификат и вызвал ошибку.
В нашем случае это была проблема переговоров с Ciphers. Мы получали эту ошибку случайным образом. Мы решили наш problmem, заставив Ciphers следующим образом:
$soapClient = new SoapClient('http://example.com/soap.asmx?wsdl',array("stream_context" => stream_context_create(array('ssl' => array('ciphers'=>'AES256-SHA')))));
Похоже, что PHP не обсуждал одни и те же шифры при каждом вызове службы.
Для меня это было проблемой в службе httpd
(Fedora 24). Простой перезапуск сделал трюк:
sudo service httpd restart
В моем случае он работал после подключения к wsdl, используйте функцию __setLocation()
чтобы определить местоположение снова, потому что вызов завершается с ошибкой:
Не удалось подключиться к хосту
Это происходит, если WSDL отличается от указанного в SoapClient::SoapClient
.
Я, наконец, нашел причину, потому что ее библиотека не может найти комплект СА в вашей системе. PHP> = v5.6 автоматически устанавливает verify_peer в true по умолчанию. Однако не все системы имеют известный набор СА на диске.
Вы можете попробовать одну из следующих процедур:
1.Если у вас есть файл CA в вашей системе, установите openssl.cafile
или curl.cainfo
в свой php.ini
на путь вашего файла CA.
2.Установите местоположение своего файла SSL CA.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($cHandler, CURLOPT_CAINFO, $path-of-your-ca-file);
3.disabled verify_peer
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Это, скорее всего, относится к проблеме подключения. Это может быть либо то, что ваше интернет-соединение было недоступно, либо веб-сервис, который вы пытаетесь использовать, был недоступен. Я предлагаю использовать эту услугу, чтобы узнать, находится ли веб-служба в сети или нет: http://downforeveryoneorjustme.com/