Ошибка подключения к серверу could not connect to host

Иногда не удается вызвать веб-службу.

Эта проблема происходит все время.

В чем может быть проблема?

Error:
    SoapFault exception: [HTTP] Could not connect to host in 
    0 [internal function]: SoapClient->__doRequest('<?xml version="...', http://.', '', 1, 0)

4b9b3361

Ответ 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

ujava's user avatar

Ответ 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

ujava's user avatar

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

ujava's user avatar

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

VolenD's user avatar

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

MediaFormat's user avatar

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

Juan Martín Pagella's user avatar

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's user avatar

Emil

7,22017 gold badges76 silver badges135 bronze badges

answered Oct 25, 2012 at 8:24

curzduff's user avatar

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's user avatar

atiruz

2,75626 silver badges36 bronze badges

answered Jan 31, 2017 at 16:27

MaxP's user avatar

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's user avatar

Stephen Rauch

47.5k31 gold badges106 silver badges135 bronze badges

answered Nov 3, 2017 at 12:56

Julian Duque Mejía's user avatar

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

Jacob's user avatar

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

Jean Fiedler's user avatar

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

Panusit's user avatar

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's user avatar

Tom Aranda

5,88911 gold badges35 silver badges51 bronze badges

answered Dec 12, 2017 at 3:56

Tianya Lan's user avatar

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 Synev's user avatar

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

David Hadaller's user avatar

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 BADIA's user avatar

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

pan7an's user avatar

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

Nesaver's user avatar

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

marcovtwout's user avatar

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

François Breton's user avatar

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

Cas van Noort's user avatar

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

hlscalon's user avatar

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

Zelkovar's user avatar

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

Andrew Rendall's user avatar

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

Alex's user avatar

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

Фаузер's user avatar

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

Ali's user avatar

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/

Понравилась статья? Поделить с друзьями:
  • Ошибка подключения к серверам окулус
  • Ошибка подключения к серверу apple id при сбросе настроек
  • Ошибка подключения к серверу майнкрафт failed to synchronize
  • Ошибка подключения к серверам код 600 стандофф
  • Ошибка подключения к серверу лол