Exception Uncaught SoapFault: [HTTP] Error Fetching en-têtes http

j'essaie de créer une connexion soap vers les services web de Magento, mais j'ai une erreur quand j'essaie de créer une instance de la classe client soap. Je peux voir le fichier wsdl dans firefox sans problème et je peux regarder php faire la requête pour le wsdl dans les journaux apaches mais il échoue toujours. Nusoap peut se connecter.

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

L'erreur est

<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>

Merci

23
demandé sur Bill the Lizard 2009-05-28 16:44:52

10 réponses

Essayer de mettre :

default_socket_timeout = 120

dans votre php.ini fichier.

34
répondu Michael Sivolobov 2014-08-28 07:23:50

avez-vous essayé d'ajouter

'trace'=>1,

pour SoapClient paramètres de création et ensuite:

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

pour voir ce qui se passe?

11
répondu hegemon 2009-05-29 05:55:47

cette erreur peut apparaître sur le client s'il y a un problème du côté du serveur. Par exemple, si le serveur SOAP est un script PHP avec une erreur d'analyse, le client échouera avec ce message.

si vous avez le contrôle du serveur, faites suivre votre error_log D'Apache sur la machine qui héberge le serveur SOAP. Sur CentOS, vous trouverez ceci dans /var/log/httpd / error_log, donc la commande est:

tail-f / var/log/httpd / error_log

maintenant rafraîchir le client et regarder pour le message d'erreur. Toute erreur PHP avec le script du serveur sera affichée.

j'Espère que l'aide à quelqu'un.

6
répondu David Hurst 2010-11-19 17:21:34

j'ai fait face au même problème.

Je la dirigeais en tant que CLI. Donc PHP était toujours en cours d'exécution et il a dû faire appel soap encore et encore après un certain intervalle.

L'erreur que j'ai faite était d'utiliser singleton pattern pour ça. Je pensais que l'utilisation de singleton allait provoquer une augmentation de la performance, mais j'ai obtenu

Error Fetching http headers in ...

Je l'ai corrigé en créant un nouvel objet saop pour chaque appel.

4
répondu Rahul Prasad 2013-05-30 13:20:07

Je ne suis pas à propos de votre configuration PHP mais JUSQU'à ce que PHP 5.2.6, PHP ait un problème avec le client SOAP:

bogue n ° 41983 - erreur récupérant les en-têtes http

Bug #41983

2
répondu Posto 2014-05-07 20:11:07

S'il s'agit d'un problème lié à Magento, vous devez désactiver la réindexation automatique car cela pourrait causer la temporisation de la socket (ou l'expiration). Vous pouvez le rallumer une fois que le script a terminé ses tâches. Augmenter le délai d'expiration de la socket par défaut en php.l'ini est également une bonne idée.

1
répondu Michael Mussulis 2012-12-02 13:08:10

dans mon journal d'erreurs apache, j'ai vu:

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

donc j'ai supprimé tout le contenu de mon plus grand fichier log 2.1 GB /var/log/system.journal. Maintenant tout fonctionne.

0
répondu saintsjd 2010-02-16 20:44:13

il y a un problème dans la version php inférieure à 5.2.6. Vous devrez peut-être mettre à jour la version de php.

0
répondu obiyoda 2010-10-14 18:06:52

Veuillez mettre à jour votre php.ini

default_socket_timeout = 120

Vous pouvez créer votre propre php.ini si php est installé un CGI au lieu d'un module Apache

0
répondu Shahzeb chohan 2013-12-05 13:46:52

j'ai fait face au même problème et essayé toutes les solutions ci-dessus. Malheureusement, rien n'travail.

  1. Délai d'attente du Socket (Non travaillé)
  2. Agent Utilisateur (Non Travaillé)
  3. configuration de SoapClient,cache_wsdl et Keep-Alive etc..

toute cette partie de headers que nous sommes en train de passer. J'ai résolu mon problème en ajoutant le compression propriété de l'en-tête. Cette obligation lorsque vous attendez une réponse gzip format comprimé.

//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,
));

j'Espère que ça aide.

Bonne chance.

0
répondu Sanjay Mohnani 2018-05-26 10:21:01