Error fetching http headers перевод

У меня проблема с SOAP, но я не нашел реального ответа.

Это мой простой SOAP-запрос в блоке try catch.

Я получаю исключение SoapFault:

В чем причина этого?

Решение

Чтобы исправить эту ошибку, мы можем увеличить либо увеличить время ожидания сокета default_socket_time в php.ini или добавить connection_timeout параметр в массиве параметров передается конструктору SoapClient.

Эти параметры находятся в секунд.

Кроме того, вы можете изменить код

Примечание. Время ожидания сокета по умолчанию в php составляет 60 секунд.

  1. connection_timeout параметр в конструкторе SoapClient

$client = new SoapClient($wsdl, array(‘connection_timeout’ => 120));

Другие решения

Конфигурация, которая работала для меня, определяла в моем php-скрипте следующие параметры:

Самое важное определение параметра, согласно моему опыту с этой проблемой, было ini_set (‘default_socket_timeout’, 5000);

Во время моих тестов я установил default_socket_timeout равным 5 секундам, и ошибка «Ошибка получения заголовков http» возникла мгновенно.

Цель блога описать интересные и полезные примеры программирования в системе 1С:Предприятие 8.

Страницы

вторник, 6 августа 2013 г.

1С:Предприятие 8. Веб-сервисы. Ошибки веб-сервисов и их причины

Хочу рассказать об ошибках, с которыми столкнулся при разработке веб-сервисов на 1С. Статью буду дополнять по мере получения опыта.

1
Это сообщение об ошибке при подключении к веб сервису из PHP.
[31-Mar-2013 05:32:02 UTC] PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://test.ru/test/ws/WebServices?wsdl’ : failed to load external entity

Данное сообщение говорит лишь о недоступности веб-сервера, на котором опубликована база. В этом случае попробуйте вручную вызвать http://test.ru/test/ws/WebServices?wsdl и убедиться, что WSDL формируется. Если не формируется, значит либо веб-сервер выключен, либо база опубликована по другому адресу или порту, либо блокирует фаервол. Могут быть и другие причины.

Читайте также:  1С бухгалтерия демо база

2
02-Apr-2013 13:46:10 UTC] PHP Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/users/b/test/domains/ test .ru/ testDIR / test .php:169

Эта ошибка возникает если WSDL возвращается с ошибкой. Есть несколько причин для этой ошибки:

  1. Несогласованность пространств имен в конфигурации. Например в ws-операции тип возвращаемого значения не соответствует типу из XDTO. Это может возникнуть при сменен URI пространства имен пакета XDTO.
  2. Возникает если в PHP включить кеш WSDL. Кеш запоминает WSDL и при каждом вызове веб-операции не запрашивает его, но если вы поменяли веб-сервис, то произойдет ошибка. Вообще, при разработке кеш стоит отключить, а если уже все работает то для скорости лучше включить. Ускорение при отключенном кеше заметное. Для примера скажу, что создание объекта SoapClient с выключенным кешем занимает примерно 2 сек, а с включенным — за сотые доли секунды. Отключить можно так:
    ini_set ( "soap.wsdl_cache_enabled" , 0);
    или
    $client = new SoapClient( ‘http://somewhere.com/?wsdl’ , array ( ‘cache_wsdl’ => 0));

12 комментариев :

Не могу разобраться со следующей ошибкой. Разные soap клиенты возвращают ошибку типа "Unable to parse URL" при вызове любого метода после чтения wsdl. Т.е. wsdl читают, а следующий запрос отправить не могут. На причину этой ошибки меня наталкивает отсутствие полного url в wsdl: . 1C 8.2.16.362, apache 2.2.18, 2.2.25. Т.е. обновление апача с 18 до 25 релиза не помогло. В httpd.conf прописан ServerName tst.icc.biz:80. Куда рыть дальше? Пробовать другой релиз 1С?

Я бы проверил пространства имен пакетов XDTO, которые описывают типы возвращаемые в результатах операций.

I’m trying to invoke a WS over https on a remote host:remote port and I get:

using the PHP5 SoapClient; I can get the list of functions by doing $client->__getFunctions() but when I call $client->myFunction(. ) I always get this error.

Читайте также:  Рисовать проекты домов программа

I’ve googled and found that increasing default_socket_timeout in php.ini should fix it, but it did not work.

Can anyone suggest me a solution?

EDIT: here is the code:

always ends in the error.

How do I solve the problem?

14 Answers 14

This error is often seen when the default_socket_timeout value is exceeded for the SOAP response. (See this link.)

Note from the SoapClient constructor: the connection_timeout option is used for defining a timeout value for connecting to the service, not for the timeout for its response.

You can increase it like so:

This should tell you if the timeout is the issue, or whether you have a different problem. Bear in mind that you should not use this as a permanent solution, but rather to see if it gets rid of the error before moving on to investigate why the SOAP service is responding so slowly. If the service is consistently this slow, you may have to consider offline/batch processing.

Just wanted to share the solution to this problem in my specific situation (I had identical symptoms). In my scenario it turned out to be that the ssl certificate provided by the web service was no longer trusted. It actually turned out to be due to a new firewall that the client had installed which was interfering with the SOAP request, but the end result was that the certificate was not being correctly served/trusted.

It was a bit difficult to track down because the SoapClient call (even with trace=1) doesn’t give very helpful feedback.

I was able to prove the untrusted certificate by using:

Читайте также:  Wifi direct для телевизора

I know this won’t be the answer to everyone’s problem, but hopefully it helps someone. Either way I think it’s important to realise that the cause of this error (faultcode: "HTTP" faultstring: "Error Fetching http headers") is usually going to be a network/socket/protocol/communication issue rather than simply "not allowing enough time for the request". I can’t imagine expanding the default_socket_timeout value is going to resolve this problem very often, and even if it does, surely it would be better to resolve the issue of WHY it is so slow in the first place.