2009-05-28 14 views
21

J'essaie de créer une connexion soap avec les services Web de Magento, mais une erreur se produit lorsque j'essaie de créer une instance de la classe de 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.Exception SoapFault non interceptée: [HTTP] Erreur lors de la récupération des en-têtes http

$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

+1

je pourrais être confondu avec la ligne, mais avec « gift_service .php (29): SoapClient- > call (NULL, 'catalog_categor ...', "dans la pile des appels ne semble pas correspondre à" $ proxy = new SoapClient "mais quelque chose comme" proxy-> catalog_categories() " ? S'il vous plaît (double) vérifier la ligne 29 dans gift_service.php – VolkerK

Répondre

33

Essayez de définir:

default_socket_timeout = 120 

dans votre fichier php.ini.

+4

Cela m'a aidé dans le cas complètement indépendant de Magento. – mindeh

+2

Cela peut également être fait au moment de l'exécution avec 'ini_set ('default_socket_timeout', 120)', qui vous donnera la valeur d'origine si vous voulez le restaurer par la suite. – xiuyuan

11

Avez-vous essayé d'ajouter

'trace'=>1, 

aux paramètres de création SoapClient puis:

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

pour voir ce qui se passe?

+0

cela m'aider à voir ma demande de savon manquait le bon paramètre, mais je ne sais pas pourquoi mon fichier wsdl ne met pas à jour corr ectly. –

0

Dans mon erreur apache journal, je vis:

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

Je, enlevé tout le contenu de mon plus grand fichier journal 2.1GB /var/log/system.log. Maintenant tout fonctionne.

0

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

6

Cette erreur peut apparaître sur le client s'il y a un 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, mettez fin à votre journal d'erreurs Apache sur la machine qui héberge le serveur SOAP. Sur CentOS vous trouverez dans/var/log/httpd/error_log, de sorte que la commande est:

tail -f/var/log/httpd/error_log

rafraîchir Maintenant, le client et observez le message d'erreur . Toutes les erreurs PHP avec le script du serveur seront affichées.

Espérons que cela aide quelqu'un.

1

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 (ou l'expiration) du socket. Vous pouvez le réactiver une fois que le script a terminé ses tâches. L'augmentation du délai d'attente de socket par défaut dans php.ini est également une bonne idée.

4

J'ai fait face au même problème.
Je l'utilisais en tant que CLI.Donc, PHP était toujours en cours d'exécution et il a dû faire appel au savon encore et encore après un certain intervalle.
L'erreur que j'ai faite était en utilisant un motif singleton pour cela. Je pensais que l'utilisation de singleton provoquera gain de performances, mais je suis arrivé à leur tour

Error Fetching http headers in ... 

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

0

S'il vous plaît mettre à jour votre php.ini avec

default_socket_timeout = 120 

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