Содержание
- Error fetching http headers перевод
- Решение
- Другие решения
- Страницы
- вторник, 6 августа 2013 г.
- 1С:Предприятие 8. Веб-сервисы. Ошибки веб-сервисов и их причины
- 12 комментариев :
- 14 Answers 14
- Как очистить системную память телефона на Андроид
- Предварительная подготовка
- Способы очистки
- Меню Android
- Панель инженерного доступа
- Диспетчер задач
- Использование софта
- Ошибка при получении заголовков http в SoapClient
- Ошибка получения заголовков http в SoapClient
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
У меня проблема с SOAP, но я не нашел реального ответа.
Это мой простой SOAP-запрос в блоке try catch.
Я получаю исключение SoapFault:
В чем причина этого?
Решение
Чтобы исправить эту ошибку, мы можем увеличить либо увеличить время ожидания сокета default_socket_time в php.ini или добавить connection_timeout параметр в массиве параметров передается конструктору SoapClient.
Эти параметры находятся в секунд.
Кроме того, вы можете изменить код
Примечание. Время ожидания сокета по умолчанию в php составляет 60 секунд.
- 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 формируется. Если не формируется, значит либо веб-сервер выключен, либо база опубликована по другому адресу или порту, либо блокирует фаервол. Могут быть и другие причины.
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 возвращается с ошибкой. Есть несколько причин для этой ошибки:
- Несогласованность пространств имен в конфигурации. Например в ws-операции тип возвращаемого значения не соответствует типу из XDTO. Это может возникнуть при сменен URI пространства имен пакета XDTO.
- Возникает если в 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:
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.
Источник
Как очистить системную память телефона на Андроид
Довольно часто владельцы портативных устройств сталкиваются с «торможением» гаджетов. Это выражается в медленной работе, периодическом появлении различных ошибок, подвисаниях или вылете установленных приложений и т. д. Причина – скопившийся системный «мусор». Кто-то с этим мирится, не зная, что существует сразу несколько способов решить проблему.
Если вы являетесь владельцем смартфона Samsung или другого гаджета с системой Android, то оптимальное решение – обращение в сервис телефонов Самсунг. Сэкономите время и будете уверены в безопасности устройства. Но как очистить память телефона «Самсунг», если нет возможности обратиться к специалистам? В статье поговорим именно об этом.
Предварительная подготовка
Для начала следует сделать резервную копию всех данных устройства. Дело в том, что в процессе очистки все приложения, установленные с момента покупки гаджета, сделанные фотографии, загрузки и прочее будут удалены. По сути, телефон вернётся в нулевое «магазинное» состояние.
Сделать резервную копию можно несколькими способами:
- Вручную – просто подключаем устройство Samsung к компьютеру, ноутбуку и скидываем всё необходимое.
- Через программу – существуют специальные приложения, которые самостоятельно сделают бэкап. Это удобно, но лучше проконтролировать результат. Некоторые программы игнорируют определённые разделы памяти. К примеру, фотографии.
- Через облачные сервисы – интересный, но не очень удобный вариант. Потребуется подключиться к специальному ресурсу, куда и будут скопированы все данные. Опять же нужен контроль.
Бэкап сделан, аккумулятор заряжен? Вернёмся к вопросу о том, как очистить память телефона Samsung. Есть несколько основных способов. Некоторые из них универсальны, другие доступны не на всех устройствах. Разберём основные.
Способы очистки
Существуют следующие методы, как можно очистить внутреннюю память телефона «Самсунг»:
- с помощью системного меню;
- через инженерную панель;
- используя диспетчер задач;
- при помощи стороннего софта.
Все варианты решения проблемы отличаются глубиной очистки. Если вы воспользуетесь системным меню, то в результате получите полностью «чистый» гаджет Samsung. На нём будет только основная система и стандартные приложения.
Дополнительные программы обычно затрагивают только откровенный «мусор» – временные и остаточные файлы.
Меню Android
Зажимаем три кнопки: увеличения громкости, выключения смартфона и «Домой».
Телефон перезагружается, появляется меню с непонятными командами. Перемещение вверх и вниз осуществляется кнопками громкости, выбор пункта – клавишей вкл./выкл. Алгоритм действий следующий:
- Кликаем wipe data/factory reset.
- Далее Yes — delete all user data.
- Выбираем строку Reboot system now.
Всё. Можно переносить обратно предварительно сохранённые файлы и пользоваться гаджетом.
Панель инженерного доступа
Когда возникает вопрос, как очистить системную память телефона «Самсунг», вспоминается именно она. Довольно простой способ, который не требует ROOT-прав. Однако он доступен не во всех моделях. Узнать это можно, введя следующую команду – *#9900#. После манипуляции должно открыться англоязычное меню. Ищем подпункт Delete dumpstate/logcat. Нашли? Отлично! Жмём и радуемся. Нет – переходим к другому методу.
Диспетчер задач
Универсальный способ. Открываем диспетчер, закрываем все приложения. Ищем иконку глубокой очистки. Она похожа на стопку книг с крестиком. Чаще всего расположена в правом нижнем углу. Далее ознакомимся со списком того, что будет удалено и жмём «Очистить память». Просто, удобно, эффективно. Отличное решение вопроса того, как очистить внутреннюю память телефона Samsung.
Внимание! При таком удалении также не забудьте сделать копию данных. Автоматический бэкап предусмотрен далеко не во всех смартфонах.
Использование софта
Существуют специальные программы для очистки ОЗУ. Есть лицензионные приложения и «пиратские». Рекомендуется использовать первые, так как они гарантируют хоть какую-то безопасность. Лучшими считаются «ES Проводник» и CCleaner. Первый характеризуется более глубоким подходом к проблеме. Но потребуются РУТ-права. Второй отлично подходит для периодического удаления «мусора». Назовём CCleaner оптимальным повседневным вариантом.
Также многим будет полезно знать, как очистить карту памяти на телефоне «Самсунг». Это делается через меню настроек, раздел «Память». Также можно удалить файлы вручную или с помощью тех же специальных программ.
Источник
Ошибка при получении заголовков http в SoapClient
Я пытаюсь вызвать WS через https на удаленном хосте: удаленный порт и получаю:
с использованием PHP5 SoapClient; Я могу получить список функций, выполнив это действие, $client->__getFunctions() но когда я звоню, $client->myFunction(. ) я всегда получаю эту ошибку.
Я погуглил и обнаружил, что увеличение default_socket_timeout php.ini должно исправить это, но это не сработало.
Может ли кто-нибудь предложить мне решение?
РЕДАКТИРОВАТЬ: вот код:
всегда заканчивается ошибкой.
Как решить проблему?
Эта ошибка часто возникает, когда default_socket_timeout значение ответа SOAP превышено. ( См. Эту ссылку .)
Примечание конструктора SoapClient: этот connection_timeout параметр используется для определения значения тайм-аута для подключения к службе, а не тайм-аута для ее ответа.
Вы можете увеличить его так:
Это должно сказать вам, является ли проблема тайм-аутом или у вас другая проблема. Имейте в виду, что вам не следует использовать это как постоянное решение , а лучше посмотреть, избавится ли оно от ошибки, прежде чем переходить к исследованию, почему служба SOAP так медленно реагирует. Если служба постоянно работает так медленно, возможно, вам придется подумать о автономной / пакетной обработке.
Просто хотел поделиться решением этой проблемы в моей конкретной ситуации (у меня были идентичные симптомы). В моем сценарии оказалось, что SSL-сертификат, предоставленный веб-службой, больше не является доверенным. На самом деле это произошло из-за нового брандмауэра, установленного клиентом, который мешал выполнению запроса SOAP, но конечным результатом было то, что сертификат не обслуживался / не доверял должным образом.
Это было немного сложно отследить, потому что вызов SoapClient (даже с trace = 1) не дает очень полезной обратной связи.
Мне удалось подтвердить ненадежный сертификат, используя:
Я знаю, что это не будет решением всех проблем, но, надеюсь, кому-то это поможет. В любом случае, я думаю, важно понимать, что причиной этой ошибки (код ошибки: «HTTP», строка сбоя: «Ошибка при загрузке заголовков http») обычно будет проблема сети / сокета / протокола / связи, а не просто «недопущение достаточного количества время для запроса ». Я не могу себе представить, что расширение значения default_socket_timeout решит эту проблему очень часто, и даже если это произойдет, конечно, было бы лучше решить вопрос, ПОЧЕМУ это так медленно в первую очередь.
Источник
Ошибка получения заголовков http в SoapClient
Я пытаюсь вызвать WS через https на удаленном хосте: удаленный порт, и я получаю:
Ошибка при загрузке заголовков http
использование PHP5 SoapClient; Я могу получить список функций, выполнив $client->__getFunctions() , но когда я вызываю $client->myFunction(. ) , я всегда получаю эту ошибку.
Я гуглил и обнаружил, что увеличение default_socket_timeout в php.ini должно исправить это, но это не сработало.
Кто-нибудь может предложить мне решение?
ОБНОВЛЕНИЕ: вот код:
всегда заканчивается ошибкой.
Как мне решить проблему?
ОТВЕТЫ
Ответ 1
Эта ошибка часто наблюдается, когда значение default_socket_timeout превышено для ответа SOAP. (См. ссылку.)
Примечание от конструктора SoapClient: параметр connection_timeout используется для определения значения времени ожидания для подключения к службе, а не для времени ожидания его ответа.
Вы можете увеличить его так:
Это должно сказать вам, является ли тайм-аут проблемой, или у вас есть другая проблема. Имейте в виду, что вы не должны использовать это как постоянное решение, а, скорее, посмотреть, избавится ли он от ошибки, прежде чем приступить к расследованию, почему служба SOAP реагирует так медленно. Если служба постоянно медленная, вам, возможно, придется рассмотреть возможность автономной/пакетной обработки.
Ответ 2
Просто хотел поделиться решением этой проблемы в моей конкретной ситуации (у меня были одинаковые симптомы). В моем сценарии оказалось, что сертификат ssl, предоставляемый веб-службой, больше не доверяет. Фактически это было связано с новым брандмауэром, который был установлен клиентом, который мешал запросу SOAP, но конечным результатом было то, что сертификат не был правильно обслуживан/доверен.
Было трудно отследить, потому что вызов SoapClient (даже с trace = 1) не дает очень полезной обратной связи.
Мне удалось доказать ненадежный сертификат, используя:
Я знаю, что это не будет ответом на все проблемы, но, надеюсь, это помогает кому-то. В любом случае, я думаю, что важно понять, что причина этой ошибки (ошибка: «HTTP» faultstring: «Ошибка получения заголовков HTTP» ) обычно будет проблемой сети/сокета/протокола/связи, а не просто «недостаточно разрешать времени для запроса». Я не могу себе представить, что расширение значения default_socket_timeout позволит решить эту проблему очень часто, и даже если это произойдет, наверняка было бы лучше решить вопрос о том, почему это так медленно, в первую очередь.
Ответ 3
Я полагаю, что это слишком поздно, но у меня такая же проблема. Я пробую тайм-аут сокета, но он не работает. Моя проблема заключалась в том, что клиент и сервер, на том же физическом сервере. Когда клиентский код работает на одном физическом сервере, я получаю эту ошибку, но с тем же кодом клиента, который перемещается на мой локальный хост, запрашивая сервер (клиент и сервер выполнялись в двух разных метоках) все работает нормально.
Возможно, это может помочь кому-то еще!
Ответ 4
Установка ‘keep_alive’ на false работала для меня:
Ответ 5
Я столкнулся с той же проблемой и попробовал все вышеперечисленные решения. К сожалению, ничего не сработало.
- Тайм-аут сокета (не работает)
- Пользовательский агент (не работает)
- Конфигурация SoapClient, cache_wsdl и Keep-Alive и т.д.
Я решил свою проблему с добавлением свойства заголовка обжатия. Это действительно требуется, когда вы ожидаете ответа в сжатом формате gzip.
Надеюсь, это поможет.
Ответ 6
Конфигурация, которая работала для меня, определяла на моем php script следующие параметры:
Самое важное определение параметра, согласно моему опыту с этой проблемой, было
Во время моих тестов я определил default_socket_timeout до 5 секунд, и ошибка «Ошибки при получении заголовков http» была поднята мгновенно.
Надеюсь, это поможет вам!
Ответ 7
Я просто хотел добавить, для полноты, что похоже на Manachi, я получил это сообщение, потому что сертификат клиента, который я использовал, требовал кодовую фразу, и у меня случайно был дополнительный символ в конце фразы. Это сообщение просто для того, чтобы предложить еще одно предложение для изучения. Если хост требует использования сертификата клиента (через параметр local_cert), убедитесь, что вы указали правильный путь к сертификату и правильную кодовую фразу (если необходимо). Если вы этого не сделаете, очень вероятно, что вы увидите это же сообщение об ошибке.
Ответ 8
Ни один из вышеперечисленных методов не работал у меня.
Когда я проанализировал заголовок запроса из __getLastRequestHeaders, я увидел следующее:
POST /index.php/api/index/index/?SID=012345 HTTP/1.1 Host: www.XYZ.com
URL API, который я использовал, был другим, например, www.ABC.com. Я изменил URL-адрес API на www.XYZ.com/index.php/api?wsdl, а затем он сработал.
Оба URL-адреса возвратили один и тот же WSDL с одного и того же сервера, но только один разрешенный вход.
Ответ 9
У меня была эта проблема, и я проверил, и в моем случае был брандмауэр. PHP неправильно показывает ошибку. Чтобы выполнить запрос, ответил брандмауэр:
SoapClient ожидает конверт SOAP, но получает код HTML. Именно поэтому PHP отвечает: «Ошибка получения заголовков Http», потому что он не может понять, что он получил в ответ. Чтобы устранить эту проблему, обратитесь к сетевому администратору, чтобы проверить, нет ли какого-либо брандмауэра, NAT или прокси-сервера, а затем попросите их принять необходимые меры.
Ответ 10
Проверьте ответ HTTP-заголовка. В моем случае на API-сайте был установлен следующий заголовок:
Кажется, что PHP SoapClient не может справиться с этой опцией. В результате тело ответа было пустым, но длина содержимого в заголовке ответа была установлена правильно.
Удалите эту строку или измените ее на «закрыть», решив мою проблему.
Ответ 11
У меня была такая же проблема, и я попробовал следующее, отключив keep_alive .
Однако это не сработало для меня. То, что работало для меня, было отключением кэша SOAP. Кажется, он кэшировал неправильные запросы, и после отключения я фактически заметил, что мои запросы выполнялись быстрее.
На сервере linux вы можете найти это в своем файле /etc/php.ini .
Найдите soap.wsdl_cache_enabled=1 и измените его на soap.wsdl_cache_enabled=0 .
Не забудьте перезагрузить apache. service httpd reload
Ответ 12
Другой возможной причиной этой ошибки могут быть некоторые операции OpenSSL, оставляющие не очищенные ошибки. Поместите этот фрагмент кода перед SOAP-запросом, чтобы очистить их:
Ответ 13
Я получил эту же ошибку, и в моем случае сервер, на который я отправлял запрос, отвечал с ошибкой тайм-аута шлюза 504. Я не осознавал этого, пока не пошел по URL-адресу в браузере, который запрашивался запросом SOAP:
Ответ 14
Мы встречали Error fetching http headers при каждом втором вызове SoapClient::__soapCall(,) . Однако не каждая конечная точка/сервер мыла была затронута.
Оказалось, что переключение на http надежно работает для всех серверов, но соединения через https /безопасный HTTP показали вышеупомянутые симптомы. openssl_error_string() , как предложил Furgas, не вернул никаких ошибок.
Оказалось, что некорректно работающие мыльные серверы отправляют HTTP-заголовок с каждым ответом, что приводит к тому, что мыльный клиент задыхается от второго мыльного вызова: Connection: Upgrade, close . Хорошо работающие серверы не отправили Обновление на последовательные ответы.
Что сработало для нас:
- установив keep_alive в значение false, как упомянул Тьяго
- Отключение заголовков Upgrade- и Connection через файлы .htaccess
Хотя мыльные серверы с хорошим поведением не нуждались в этом, однажды для неправильного поведения потребовалось установить для keep_alive значение false и отключить заголовки.
Основная причина до сих пор неясна, но в Apache имеется отчет об ошибке относительно заголовков обновления при использовании HTTPS.
Источник
Содержание
- Решение
- Другие решения
- Страницы
- вторник, 6 августа 2013 г.
- 1С:Предприятие 8. Веб-сервисы. Ошибки веб-сервисов и их причины
- 12 комментариев :
- 14 Answers 14
У меня проблема с SOAP, но я не нашел реального ответа.
Это мой простой SOAP-запрос в блоке try catch.
Я получаю исключение SoapFault:
В чем причина этого?
Решение
Чтобы исправить эту ошибку, мы можем увеличить либо увеличить время ожидания сокета default_socket_time в php.ini или добавить connection_timeout параметр в массиве параметров передается конструктору SoapClient.
Эти параметры находятся в секунд.
Кроме того, вы можете изменить код
Примечание. Время ожидания сокета по умолчанию в php составляет 60 секунд.
- 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 формируется. Если не формируется, значит либо веб-сервер выключен, либо база опубликована по другому адресу или порту, либо блокирует фаервол. Могут быть и другие причины.
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 возвращается с ошибкой. Есть несколько причин для этой ошибки:
- Несогласованность пространств имен в конфигурации. Например в ws-операции тип возвращаемого значения не соответствует типу из XDTO. Это может возникнуть при сменен URI пространства имен пакета XDTO.
- Возникает если в 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:
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.
Я пытаюсь вызвать WS через https на удаленном хосте: удаленный порт, и я получаю:
Ошибка при загрузке заголовков http
использование PHP5 SoapClient; Я могу получить список функций, выполнив $client->__getFunctions()
, но когда я вызываю $client->myFunction(...)
, я всегда получаю эту ошибку.
Я гуглил и обнаружил, что увеличение default_socket_timeout
в php.ini должно исправить это, но это не сработало.
Кто-нибудь может предложить мне решение?
ОБНОВЛЕНИЕ: вот код:
$wsdl="myWSDL";
$client = new SoapClient($wsdl,array('connection_timeout'=>5,'trace'=>true,'soap_version'=>SOAP_1_2));
var_dump($client->__getFunctions());
try {
$response=$client->myFunction("1","2","3");
} catch (SoapFault $fault) {
var_dump($fault);
}
}
всегда заканчивается ошибкой.
Как мне решить проблему?
Ответ 1
Эта ошибка часто наблюдается, когда значение default_socket_timeout
превышено для ответа SOAP. (См. ссылку.)
Примечание от конструктора SoapClient: параметр connection_timeout
используется для определения значения времени ожидания для подключения к службе, а не для времени ожидания его ответа.
Вы можете увеличить его так:
ini_set('default_socket_timeout', 600); // or whatever new value you want
Это должно сказать вам, является ли тайм-аут проблемой, или у вас есть другая проблема. Имейте в виду, что вы не должны использовать это как постоянное решение, а, скорее, посмотреть, избавится ли он от ошибки, прежде чем приступить к расследованию, почему служба SOAP реагирует так медленно. Если служба постоянно медленная, вам, возможно, придется рассмотреть возможность автономной/пакетной обработки.
Ответ 2
Просто хотел поделиться решением этой проблемы в моей конкретной ситуации (у меня были одинаковые симптомы). В моем сценарии оказалось, что сертификат ssl, предоставляемый веб-службой, больше не доверяет. Фактически это было связано с новым брандмауэром, который был установлен клиентом, который мешал запросу SOAP, но конечным результатом было то, что сертификат не был правильно обслуживан/доверен.
Было трудно отследить, потому что вызов SoapClient (даже с trace = 1) не дает очень полезной обратной связи.
Мне удалось доказать ненадежный сертификат, используя:
openssl s_client -connect <web service host>:<port>
Я знаю, что это не будет ответом на все проблемы, но, надеюсь, это помогает кому-то. В любом случае, я думаю, что важно понять, что причина этой ошибки (ошибка: «HTTP» faultstring: «Ошибка получения заголовков HTTP» ) обычно будет проблемой сети/сокета/протокола/связи, а не просто «недостаточно разрешать времени для запроса». Я не могу себе представить, что расширение значения default_socket_timeout позволит решить эту проблему очень часто, и даже если это произойдет, наверняка было бы лучше решить вопрос о том, почему это так медленно, в первую очередь.
Ответ 3
Я полагаю, что это слишком поздно, но у меня такая же проблема. Я пробую тайм-аут сокета, но он не работает.
Моя проблема заключалась в том, что клиент и сервер, на том же физическом сервере. Когда клиентский код работает на одном физическом сервере, я получаю эту ошибку, но с тем же кодом клиента, который перемещается на мой локальный хост, запрашивая сервер (клиент и сервер выполнялись в двух разных метоках) все работает нормально.
Возможно, это может помочь кому-то еще!
Ответ 4
Установка 'keep_alive'
на false работала для меня:
new SoapClient($api_url, array('keep_alive' => false));
Ответ 5
Я столкнулся с той же проблемой и попробовал все вышеперечисленные решения. К сожалению, ничего не сработало.
- Тайм-аут сокета (не работает)
- Пользовательский агент (не работает)
- Конфигурация 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,
));
Надеюсь, это поможет.
Удачи.
Ответ 6
Конфигурация, которая работала для меня, определяла на моем php script следующие параметры:
ini_set('default_socket_timeout', 5000);
$client = new SoapClient($url,array(
'trace' =>true,
'connection_timeout' => 5000,
'cache_wsdl' => WSDL_CACHE_NONE,
'keep_alive' => false,
));
Прошу прокомментировать.
Самое важное определение параметра, согласно моему опыту с этой проблемой, было
ini_set('default_socket_timeout', 5000);
Во время моих тестов я определил default_socket_timeout до 5 секунд, и ошибка «Ошибки при получении заголовков http» была поднята мгновенно.
Надеюсь, это поможет вам!
Ответ 7
Я просто хотел добавить, для полноты, что похоже на Manachi, я получил это сообщение, потому что сертификат клиента, который я использовал, требовал кодовую фразу, и у меня случайно был дополнительный символ в конце фразы. Это сообщение просто для того, чтобы предложить еще одно предложение для изучения. Если хост требует использования сертификата клиента (через параметр local_cert), убедитесь, что вы указали правильный путь к сертификату и правильную кодовую фразу (если необходимо). Если вы этого не сделаете, очень вероятно, что вы увидите это же сообщение об ошибке.
Ответ 8
Ни один из вышеперечисленных методов не работал у меня.
Когда я проанализировал заголовок запроса из __getLastRequestHeaders, я увидел следующее:
POST /index.php/api/index/index/?SID=012345 HTTP/1.1
Host: www.XYZ.com
URL API, который я использовал, был другим, например, www.ABC.com. Я изменил URL-адрес API на www.XYZ.com/index.php/api?wsdl, а затем он сработал.
Оба URL-адреса возвратили один и тот же WSDL с одного и того же сервера, но только один разрешенный вход.
Ответ 9
У меня была эта проблема, и я проверил, и в моем случае был брандмауэр. PHP неправильно показывает ошибку. Чтобы выполнить запрос, ответил брандмауэр:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
...
<html
...
<h1>Direct Access IP is not allowed</h1>
...
</html>
SoapClient ожидает конверт SOAP, но получает код HTML.
Именно поэтому PHP отвечает: «Ошибка получения заголовков Http», потому что он не может понять, что он получил в ответ. Чтобы устранить эту проблему, обратитесь к сетевому администратору, чтобы проверить, нет ли какого-либо брандмауэра, NAT или прокси-сервера, а затем попросите их принять необходимые меры.
Ответ 10
Проверьте ответ HTTP-заголовка. В моем случае на API-сайте был установлен следующий заголовок:
<IfModule mod_headers.c>
Header set Connection keep-alive
</IfModule>
Кажется, что PHP SoapClient не может справиться с этой опцией. В результате тело ответа было пустым, но длина содержимого в заголовке ответа была установлена правильно.
Удалите эту строку или измените ее на «закрыть», решив мою проблему.
Ответ 11
У меня была такая же проблема, и я попробовал следующее, отключив keep_alive
.
$api_proxy = new SoapClient($api_url, array('trace' => true, 'keep_alive' => false));
Однако это не сработало для меня. То, что работало для меня, было отключением кэша SOAP. Кажется, он кэшировал неправильные запросы, и после отключения я фактически заметил, что мои запросы выполнялись быстрее.
На сервере linux вы можете найти это в своем файле /etc/php.ini
.
Найдите soap.wsdl_cache_enabled=1
и измените его на soap.wsdl_cache_enabled=0
.
Не забудьте перезагрузить apache.
service httpd reload
Ответ 12
Другой возможной причиной этой ошибки могут быть некоторые операции OpenSSL, оставляющие не очищенные ошибки. Поместите этот фрагмент кода перед SOAP-запросом, чтобы очистить их:
while (openssl_error_string()) {}
Ответ 13
Я получил эту же ошибку, и в моем случае сервер, на который я отправлял запрос, отвечал с ошибкой тайм-аута шлюза 504. Я не осознавал этого, пока не пошел по URL-адресу в браузере, который запрашивался запросом SOAP:
например. https://soap-request-domain-here.com/path/to/file.wsdl
Ответ 14
Мы встречали Error fetching http headers
при каждом втором вызове SoapClient::__soapCall(,)
. Однако не каждая конечная точка/сервер мыла была затронута.
Оказалось, что переключение на http
надежно работает для всех серверов, но соединения через https
/безопасный HTTP показали вышеупомянутые симптомы.
openssl_error_string()
, как предложил Furgas, не вернул никаких ошибок.
Оказалось, что некорректно работающие мыльные серверы отправляют HTTP-заголовок с каждым ответом, что приводит к тому, что мыльный клиент задыхается от второго мыльного вызова:
Connection: Upgrade, close
. Хорошо работающие серверы не отправили Обновление на последовательные ответы.
Что сработало для нас:
- установив
keep_alive
в значение false, как упомянул Тьяго - Отключение заголовков Upgrade- и Connection через файлы .htaccess
Хотя мыльные серверы с хорошим поведением не нуждались в этом, однажды для неправильного поведения потребовалось установить для keep_alive значение false и отключить заголовки.
# .htaccess
Header unset Upgrade
Header unset Connection
Основная причина до сих пор неясна, но в Apache имеется отчет об ошибке относительно заголовков обновления при использовании HTTPS.