Uncaught SoapFault исключение: [HTTP] Ошибка получения заголовков HTTP - PullRequest
25 голосов
/ 28 мая 2009

Я пытаюсь создать мыльную связь с веб-сервисами Magento, однако я получаю сообщение об ошибке, когда пытаюсь создать экземпляр класса мыльного клиента. Я могу просмотреть файл wsdl в Firefox без проблем, и я могу наблюдать, как php делает запрос на wsdl в логах apaches, но все равно не получается. Nusoap может подключиться.

$proxy = new SoapClient('someaddress?wsdl');

Ошибка

<b>Fatal error</b>:  Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php:29
Stack trace:
[internal function]: SoapClient-&gt;__doRequest('&lt;?xml version=&quot;...',    'http://cornishw...', 'urn:Mage_Api_Mo...', 1, 0)
[internal function]: SoapClient-&gt;__call('call', Array)
/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php(29): SoapClient-&gt;call(NULL, 'catalog_categor...', 5, 'giftshop')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(586): include('/home/sites/cor...')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(228): MY_Loader-&gt;_ci_load(Array, '')
/home/sites/xxx/xxx_main/system/application/modules/contentpage/controllers/contentpage.php(44): MY_Loader-&gt;view('contentpage_tem...', false, true)
[internal function]: Contentpage-&gt;index()
/home/sites/xxx in <b>/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php</b> on line <b>29</b>

Спасибо

Ответы [ 10 ]

38 голосов
/ 20 июля 2009

Попробуйте установить:

default_socket_timeout = 120

в вашем файле php.ini.

11 голосов
/ 29 мая 2009

Вы пробовали добавить

'trace'=>1,

в параметры создания SoapClient, а затем:

var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());

чтобы увидеть, что происходит?

6 голосов
/ 19 ноября 2010

Эта ошибка может появиться на клиенте, если есть проблема на стороне сервера. Например, если SOAP-сервер представляет собой PHP-скрипт с ошибкой синтаксического анализа, клиент не сможет выполнить это сообщение.

Если вы управляете сервером, подключите Apache error_log к компьютеру, на котором размещен SOAP-сервер. В CentOS вы найдете это в / var / log / httpd / error_log, поэтому команда:

tail -f / var / log / httpd / error_log

Теперь обновите клиент и просмотрите сообщение об ошибке. Будут показаны все ошибки PHP со скриптом сервера.

Надеюсь, это кому-нибудь поможет.

4 голосов
/ 30 мая 2013

Я столкнулся с той же проблемой.
Я запускал его как CLI. Поэтому PHP всегда работал, и через некоторое время ему приходилось снова и снова вызывать мыло.
Ошибка, которую я сделал, заключалась в использовании синглтон-паттерна для этого. Я думал, что использование синглтона приведет к увеличению производительности, но я получил

Error Fetching http headers in ...

Я исправил это, создав новый объект saop для каждого вызова.

2 голосов
/ 28 мая 2009

Я не о вашей конфигурации PHP, но до PHP 5.2.6 PHP имел некоторые проблемы с SOAP-клиентом:

Ошибка # 41983 - Ошибка при получении http заголовков

Bug #41983

1 голос
/ 26 мая 2018

Я столкнулся с той же проблемой и попробовал все вышеперечисленное решение. К сожалению, ничего не работает.

  1. Таймаут сокета (не работает)
  2. Пользовательский агент (не работает)
  3. конфигурация SoapClient, cache_wsdl и Keep-Alive и т. Д.

Вся эта игра заголовков, которую мы проходим. Я решил свою проблему с добавлением свойства заголовка обжатие . Это действительно требуется, когда вы ожидаете ответа в сжатом формате gzip .

//set the Headers of Soap Client. 
$client = new SoapClient($wsdlUrl, array(
    'trace' => true, 
    'keep_alive' => true,
    'connection_timeout' => 5000,
    'cache_wsdl' => WSDL_CACHE_NONE,
    'compression'   => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
));

Надеюсь, это поможет.

Удачи.

1 голос
/ 02 декабря 2012

Если это проблема, связанная с Magento, вам следует отключить автоматическую переиндексацию, так как это может привести к таймауту (или истечению) сокета Вы можете включить его снова, как только скрипт завершит выполнение своих задач. Увеличение времени ожидания сокета по умолчанию в php.ini также является хорошей идеей.

0 голосов
/ 05 декабря 2013

Пожалуйста, обновите ваш php.ini с

default_socket_timeout = 120

Вы можете создать свой собственный php.ini, если на php установлен модуль CGI вместо модуля Apache

0 голосов
/ 14 октября 2010

Существует проблема в версии php ниже 5.2.6. Возможно, вам придется обновить версию php.

0 голосов
/ 16 февраля 2010

В моем журнале ошибок apache я увидел:

[Tue Feb 16 14:55:02 2010] [notice] child pid 9985 exit signal File size limit exceeded (25)

Итак, я удалил все содержимое моего самого большого файла журнала 2.1GB /var/log/system.log. Теперь все работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...