web-dev-qa-db-fra.com

Exception SoapFault non capturée: [HTTP] Erreur lors de l'extraction des en-têtes http

J'essaie de créer une connexion soap aux services Web de Magento, mais un message d'erreur s'affiche lorsque j'essaie de créer une instance de la classe client soap. Je peux voir le fichier WSDL dans Firefox sans problèmes et je peux regarder PHP faire la demande 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
Remy

Essayez de définir:

default_socket_timeout = 120

dans votre fichier php.ini.

35

Avez-vous essayé d'ajouter

'trace'=>1,

paramètres de création SoapClient puis:

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

pour voir ce qui se passe?

11
hegemon

Cette erreur peut apparaître sur le client en cas de problème côté serveur. Par exemple, si le serveur SOAP est un script PHP avec une erreur d'analyse, le client échouera avec ce message.

Si vous contrôlez le serveur, placez votre journal d'erreur Apache sur l'ordinateur qui héberge le serveur SOAP. Sur CentOS, vous trouverez cela dans/var/log/httpd/error_log, la commande est donc:

tail -f/var/log/httpd/error_log

Maintenant, actualisez le client et surveillez le message d'erreur. Toutes les erreurs PHP avec le script du serveur seront affichées.

J'espère que ça aide quelqu'un.

6
David Hurst

J'ai rencontré le même problème. 
Je le courais en tant que CLI. Donc PHP était toujours en marche et il devait faire appel de savon encore et encore après un intervalle.
L’erreur que j’ai commise a été d’utiliser un motif singleton pour cela. Je pensais que l’utilisation de singleton causerait une augmentation des performances, mais j’ai obtenu 

Error Fetching http headers in ...

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

4
Rahul Prasad

Je ne parle pas de votre configuration PHP, mais jusqu'à ce que PHP 5.2.6, PHP rencontre un problème avec le client SOAP:

Bogue n ° 41983: erreur lors de l'extraction des en-têtes http

Bug #41983

2
Posto

S'il s'agit d'un problème lié à Magento, vous devez désactiver la réindexation automatique car cela pourrait entraîner l'expiration du socket. Vous pouvez le réactiver une fois que le script a terminé ses tâches. Augmenter le délai d'expiration du socket par défaut dans php.ini est également une bonne idée.

1
Michael Mussulis

Veuillez mettre à jour votre php.ini avec 

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

Dans mon journal des erreurs Apache, j'ai vu: 

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

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

0
saintsjd

J'ai rencontré le même problème et essayé toutes les solutions ci-dessus. Malheureusement, rien ne fonctionne.

  1. Socket Timeout (non travaillé)
  2. Agent utilisateur (non travaillé)
  3. Configuration de SoapClient, cache_wsdl et Keep-Alive etc .. 

Tout ce jeu d'en-têtes que nous passons. J'ai résolu mon problème en ajoutant la propriété compression header. Cela nécessite en fait lorsque vous attendez une réponse au format gzip compressé.

//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
Sanjay Mohnani

Il y a un problème dans la version php inférieur à 5.2.6. Vous devrez peut-être mettre à niveau la version de php.

0
obiyoda