Error fetching http headers soapclient



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

Я получаю следующее исключение на моей странице php.

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

Я прочитал пару статей и обнаружил, что default_socket_timeout требует настройки. поэтому я установил это следующим образом. default_socket_timeout = 480

Я все еще получаю ту же ошибку. Кто-нибудь может мне помочь?

Syed Tayyab Ali

3 ответы

Я получаю Error fetching http headers по двум причинам:

  1. Сервер долго отвечает.
  2. Сервер не поддерживает Keep-Alive связи (которые охватываются моим ответом).

PHP всегда будет пытаться использовать постоянное соединение с веб-службой, отправляя Connection: Keep-Alive Заголовок HTTP. Если сервер всегда закрывает соединение и не сделал этого (PHP не получил EOF ), ты можешь получить Error fetching http headers когда PHP пытается повторно использовать соединение, которое уже закрыто на стороне сервера.

Примечание: этот сценарий произойдет только в том случае, если такой же SoapClient объект отправляет более одного запроса и с большой частотой. Отправка Connection: close Заголовок HTTP вместе с первым запросом исправил бы это.

В версии PHP 5.3.5 (в настоящее время поставляется с Ubuntu) установка заголовка HTTP Connection: Close не поддерживается SoapClient. Следует иметь возможность отправлять заголовок HTTP в контексте потока (используя $option — ключ stream_context в качестве аргумента SoapClient ), но SoapClient не поддерживает изменение заголовка подключения (Обновление: Эта ошибка была решить в версии PHP 5.3.11).

Другое решение — реализовать свой собственный __doRequest() . По предоставленной ссылке парень использует Curl отправить запрос. Это сделает ваше приложение PHP зависимым от Curl . В реализации также отсутствуют такие функции, как сохранение заголовков запроса / ответа.

Третье решение — просто закрыть соединение сразу после получения ответа. Это можно сделать, установив атрибут SoapClients. httpsocket в NULL in __doRequest() , __call() or __soapCall() . Пример с __call() :

ответ дан 23 окт ’14, 08:10

Начиная с PHP 5.4 этот флаг теперь доступен: параметр keep_alive — это логическое значение, определяющее, следует ли отправлять заголовок Connection: Keep-Alive или Connection: close. (php.net/manual/en/soapclient.soapclient.php) — Heuri

Жалко, что во избежание этого требуется отключить поддержку активности; Возможно, я неправильно понимаю, но разве ответ сервера не должен указывать, как долго соединение может поддерживаться, а затем SoapClient должен просто знать, что не следует повторно использовать его после истечения времени ожидания (и, в идеале, повторно подключаться прозрачно)? — Эль Йобо

«Сервер не поддерживает соединения Keep-Alive (о чем идет речь в моем ответе).». У меня был глючный сервер, с которым я разговаривал. Он неправильно обрабатывал соединения Keep-Alive, и мне пришлось его отключить. — HNygard

Читайте также:  Mimaki jv33 error 30

У меня была такая же проблема, и я попробовал сделать следующее, отключив keep_alive .

Однако у меня это не сработало. У меня сработало отключение кеша SOAP. Похоже, что кешируются неправильные запросы, и после отключения я заметил, что мои запросы выполняются быстрее.

На сервере Linux вы можете найти это в своем /etc/php.ini .

Искать soap.wsdl_cache_enabled=1 и изменить его на soap.wsdl_cache_enabled=0 .

Не забудьте перезагрузить apache. service httpd reload

Источник

Ошибка получения заголовков http в SoapClient

Я пытаюсь вызвать WS over https на удаленном хосте: удаленный порт, и я получаю:

Ошибка получения заголовков HTTP

используя PHP5 SoapClient; Я могу получить список функций, выполнив $client->__getFunctions() но когда я вызываю $client->myFunction(. ) я всегда получаю эту ошибку.

Я googled и нашел, чтобы увеличить default_socket_timeout в php.ini, но это не сработало.

Может ли кто-нибудь предложить мне решение?

Эта ошибка часто возникает, когда значение default_socket_timeout превышено для ответа SOAP. ( См. Эту ссылку .)

Примечание от конструктора SoapClient: параметр connection_timeout используется для определения значения тайм-аута для подключения к службе, а не для таймаута для его ответа.

Вы можете увеличить его так:

Имейте в виду, что вы не должны использовать это как постоянное решение , а скорее, чтобы устранить эту ошибку, прежде чем перейти к исследованию, почему служба SOAP так медленно реагирует. Если услуга последовательно медленная, вам может потребоваться автономная / пакетная обработка.

Просто хотел поделиться решением этой проблемы в моей конкретной ситуации (у меня были одинаковые симптомы). В моем сценарии оказалось, что сертификат ssl, предоставляемый веб-службой, больше не доверяет. Фактически это было связано с новым брандмауэром, который был установлен клиентом, который мешал запросу SOAP, но конечным результатом было то, что сертификат не был правильно обслуживан / доверен.

Было немного сложно отследить, потому что вызов SoapClient (даже с трассировкой = 1) не дает очень полезной обратной связи.

Я смог доказать ненадежный сертификат, используя:

Я знаю, что это не будет ответом на все проблемы, но, надеюсь, это помогает кому-то. В любом случае, я думаю, что важно понять, что причина этой ошибки (ошибка: «HTTP» faultstring: «Error Fetching http headers») обычно будет проблемой сети / сокета / протокола / связи, а не просто «недостаточно времени для запроса ». Я не могу себе представить, что расширение значения default_socket_timeout позволит решить эту проблему очень часто, и даже если это произойдет, наверняка было бы лучше решить вопрос о том, почему это так медленно в первую очередь.

Я полагаю, что уже слишком поздно, но у меня такая же проблема. Я пробую тайм-аут сокета, но он не работает. Моя проблема заключалась в том, что клиент и сервер, на том же физическом сервере. Когда клиентский код работает на одном и том же физическом сервере, я получаю эту ошибку, но с тем же кодом клиента, который переместился на мой локальный хост, запросив сервер (клиент и сервер были выполнены в двух разных мечках), все работает нормально.

Читайте также:  Adobe reader error 135

Может быть, это может помочь кому-то другому!

Я просто хотел добавить, для полноты, что похоже на Manachi, я получил это сообщение, потому что сертификат клиента, который я использовал, требовал ключевой фразы, и у меня случайно был дополнительный символ в конце фразы. Это сообщение просто для того, чтобы предложить еще одно предложение для изучения. Если хост требует использования сертификата клиента (через параметр local_cert), убедитесь, что вы указали правильный путь к сертификату и правильную кодовую фразу (если необходимо). Если вы этого не сделаете, очень вероятно, что вы увидите это же сообщение об ошибке.

Ни один из вышеперечисленных методов не работал для меня.

Когда я проанализировал заголовок запроса из __getLastRequestHeaders, я увидел следующее:

POST /index.php/api/index/index/?SID=012345 HTTP/1.1 Host: www.XYZ.com

URL-адрес API, который я использовал, был другим, например, http://www.ABC.com. Я изменил URL-адрес API на http://www.XYZ.com/index.php/api?wsdl, а затем он сработал.

Оба URL-адреса вернули один и тот же WSDL с одного и того же сервера, но только один разрешенный вход в систему.

У меня была эта проблема, и я проверил, и в моем случае был брандмауэр. PHP неправильно показывает ошибку. Чтобы выполнить запрос, брандмауэр ответил:

SoapClient ожидает конверт SOAP, но получает HTML-код. Вот почему PHP отвечает: «Ошибка получения заголовков Http», потому что он не может понять, что он получил в ответ. Чтобы устранить эту проблему, обратитесь к сетевому администратору, чтобы проверить, нет ли какого-либо брандмауэра, NAT или прокси-сервера, а затем попросить их принять необходимые меры.

Проверьте HTTP-заголовок ответа. В моем случае на API-сайте был установлен следующий заголовок:

Кажется, что PHP SoapClient не может справиться с этим вариантом. В результате тело ответа было пустым, но длина содержимого в заголовке ответа была установлена ​​правильно.

Удалите эту строку или измените ее, чтобы «закрыть» решить мою проблему.

У меня была такая же проблема, и я попробовал следующее, отключив keep_alive .

Однако это не сработало для меня. То, что работало для меня, было отключением кэша SOAP. Похоже, что кеширование неверных запросов и после отключения я фактически заметил, что мои запросы выполнялись быстрее.

Читайте также:  Error документ не является корректным xml не well formed рсв 1

На сервере linux вы можете найти это в файле /etc/php.ini .

Найдите soap.wsdl_cache_enabled=1 и измените его на soap.wsdl_cache_enabled=0 .

Не забудьте перезагрузить apache. service httpd reload

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

Наиболее важным параметрическим определением, согласно моему опыту с этой проблемой, было

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

Источник

SoapFault exception: [HTTP] Error Fetching http headers #503

Comments

Hi, I posted an issue with the Report Repository on the Google DFP API forums, they redirected me here, I’m having issues getting the Download URL of the report, when I make the request using the getReportDownloadURL method from ReportService I get the following:

PHP Laravel Log:

[2018-06-29 10:45:01] production.INFO: AdopsDfpCoordinator Searching oldest pending report [2018-06-29 10:55:19] production.ERROR: SoapFault exception: [HTTP] Error Fetching http headers in /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Common/AdsSoapClient.php:97 Stack trace: #0 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Common/AdsSoapClient.php(97): SoapClient->__doRequest(‘ __doRequest(‘ __soapCall(‘getReportDownlo. ‘, Array, NULL, Array, Array) #3 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Dfp/v201805/ReportService.php(96): Google\AdsApi\Common\AdsSoapClient->__soapCall(‘getReportDownlo. ‘, Array) #4 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/app/Dfp/Repositories/ReportRepository.php(130): Google\AdsApi\Dfp\v201805\ReportService->getReportDownloadURL(10160417517, ‘CSV_DUMP’) #5 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/app/Dfp/Repositories/ReportRepository.php(107): Adops\Dfp\Repositories\ReportRepository->downloadReport() #6 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/app/Dfp/Repositories/ReportRepository.php(98): Adops\Dfp\Repositories\ReportRepository->processReport() #7 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/app/Console/Commands/ReportScheduler.php(32): Adops\Dfp\Repositories\ReportRepository->processOldestReport() #8 [internal function]: Adops\Console\Commands\ReportScheduler->handle() #9 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array) #10 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\() #11 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure)) #12 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/laravel/framework/src/Illuminate/Container/Container.php(539): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL) #13 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/laravel/framework/src/Illuminate/Console/Command.php(182): Illuminate\Container\Container->call(Array) #14 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/symfony/console/Command/Command.php(251): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle)) #15 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/laravel/framework/src/Illuminate/Console/Command.php(167): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle)) #16 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/symfony/console/Application.php(946): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #17 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/symfony/console/Application.php(248): Symfony\Component\Console\Application->doRunCommand(Object(Adops\Console\Commands\ReportScheduler), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #18 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/symfony/console/Application.php(148): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #19 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #20 /app/shared/docroots/adops_dfp_coordinator/releases/20180604185549/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #21

`[2018-06-29 10:45:02] DFP_SOAP.INFO: networkCode=4403 service=InventoryService method=getAdUnitsByStatement responseTime=186 requestId=565d077ac3267f6034c7c4dab6291a6a server=ads.google.com isFault=0 faultMessage=
[2018-06-29 10:45:19] DFP_SOAP.INFO: networkCode=4403 service=ReportService method=getReportJobStatus responseTime=313 requestId=c4cd221079c997b523f2872a24cbeba8 server=ads.google.com isFault=0 faultMessage=
[2018-06-29 10:50:03] DFP_SOAP.INFO: networkCode=4403 service=InventoryService method=getAdUnitsByStatement responseTime=186 requestId=ba2b09efa63a3ca5fea9c3b994617630 server=ads.google.com isFault=0 faultMessage=
[2018-06-29 10:55:02] DFP_SOAP.INFO: networkCode=4403 service=InventoryService method=getAdUnitsByStatement responseTime=196 requestId=97ff4eed55fe6d672635de4fe2086423 server=ads.google.com isFault=0 faultMessage=
[2018-06-29 10:55:19] DFP_SOAP.WARNING: networkCode=4403 service=ReportService method=getReportDownloadURL responseTime= requestId= server=ads.google.com isFault=1 faultMessage=Error Fetching http headers
[2018-06-29 10:55:19] DFP_SOAP.NOTICE: POST /apis/ads/publisher/v201805/ReportService?wsdl HTTP/1.1^M
Host: ads.google.com^M
Connection: close^M
User-Agent: PHP-SOAP/7.1.8^M
Content-Type: text/xml; charset=utf-8^M
SOAPAction: «»^M
Content-Length: 615^M
Authorization: REDACTED

SOAP-ENV:Headerns1:RequestHeaderns1:networkCode4403 ns1:applicationNameEvolve IQ Platform Brand Campaigns (DfpApi-PHP, googleads-php-lib/35.1.0, PHP/7.1.8) SOAP-ENV:Bodyns1:getReportDownloadURLns1:reportJobId10160417517 ns1:exportFormatCSV_DUMP

HTTP/1.1 200 OK^M
Content-Type: text/xml; charset=UTF-8^M
Date: Fri, 29 Jun 2018 17:45:19 GMT^M
Expires: Fri, 29 Jun 2018 17:45:19 GMT^M
Cache-Control: private, max-age=0^M
X-Content-Type-Options: nosniff^M
X-Frame-Options: SAMEORIGIN^M
X-XSS-Protection: 1; mode=block^M
Server: GSE^M
Alt-Svc: quic=»:443″; ma=2592000; v=»43,42,41,39,35″^M
Accept-Ranges: none^M
Vary: Accept-Encoding^M
Connection: close
`
AUTH info:

`[DFP]
networkCode = «4403»
applicationName = «Evolve IQ Platform Brand Campaigns»

[OAUTH2]
clientId = «348011291855-amje5jb8e7e66eok6q1dk1i1dij9vmai.apps.googleusercontent.com»
`

The text was updated successfully, but these errors were encountered:

Источник

Оцените статью
toolgir.ru
Adblock
detector