it-roy-ru.com

Uncaught SoapFault исключение: [HTTP] Ошибка при получении заголовков http

Я пытаюсь создать соединение soap с веб-сервисами 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>

Спасибо

23
Remy

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

default_socket_timeout = 120

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

35

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

'trace'=>1,

к параметрам создания SoapClient и затем:

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

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

11
hegemon

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

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

tail -f/var/log/httpd/error_log

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

Надеюсь, что это помогает кому-то.

6
David Hurst

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

Error Fetching http headers in ...

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

4
Rahul Prasad

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

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

Bug #41983

2
Posto

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

1
Michael Mussulis

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

default_socket_timeout = 120

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

0
Shahzeb chohan

В моем журнале ошибок 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. Теперь все работает.

0
saintsjd

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

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

Вся эта игра заголовков, которую мы проходим. Я решил свою проблему с добавлением свойства compressing header. Это действительно требуется, когда вы ожидаете ответа в 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,
));

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

Удачи.

0
Sanjay Mohnani

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

0
obiyoda