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->__doRequest('<?xml version="...', 'http://cornishw...', 'urn:Mage_Api_Mo...', 1, 0)
[internal function]: SoapClient->__call('call', Array)
/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php(29): SoapClient->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->_ci_load(Array, '')
/home/sites/xxx/xxx_main/system/application/modules/contentpage/controllers/contentpage.php(44): MY_Loader->view('contentpage_tem...', false, true)
[internal function]: Contentpage->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
10 réponses
Essayer de mettre :
default_socket_timeout = 120
dans votre php.ini
fichier.
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?
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.
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.
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:
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.
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.
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.
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
j'ai fait face au même problème et essayé toutes les solutions ci-dessus. Malheureusement, rien n'travail.
- Délai d'attente du Socket (Non travaillé)
- Agent Utilisateur (Non Travaillé)
- 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.