Exception de type soapfault: [HTTP] Erreur de Récupérer les en-têtes http
Je suis d'exception suivant dans ma page php.
Exception de type soapfault: [HTTP] Erreur de Récupérer les en-têtes http
J'ai lu quelques article et a constaté que default_socket_timeout besoins de configuration.
je me suis donc fixé comme suit.
default_socket_timeout = 480
J'ai toujours la même erreur. Quelqu'un peut-il m'aider?
OriginalL'auteur Syed Tayyab Ali | 2011-01-28
Vous devez vous connecter pour publier un commentaire.
J'ai été faire
Error fetching http headers
pour deux raisons:Keep-Alive
connexions (ma réponse).PHP va toujours essayer d'utiliser une connexion permanente au web service par l'envoi de la
Connection: Keep-Alive
en-tête HTTP. Si le serveur ferme la connexion et ne l'a pas fait (PHP n'a pas reçuEOF
), vous pouvez obtenirError fetching http headers
lorsque PHP essaie de réutiliser la connexion qui est déjà fermé sur le côté serveur.Remarque: ce scénario ne se produira que si la même
SoapClient
objet envoie plus d'une demande, et avec une fréquence élevée. L'envoi deConnection: close
en-tête HTTP de concert avec la première demande aurait fixe.Dans la version de PHP 5.3.5 (actuellement livré avec Ubuntu) réglage de l'en-tête HTTP
Connection: Close
n'est pas pris en charge par SoapClient. On devrait être en mesure d'envoyer dans l'en-tête HTTP dans un contexte de flux (à l'aide de la$option
- clésstream_context
comme argument pourSoapClient
), maisSoapClient
ne prend pas en charge la modification de l'en-tête de Connexion (mise à Jour: Ce bogue a été résolu dans la version de PHP 5.3.11).Une autre solution est de mettre en place votre propre
__doRequest()
. Sur le lien fourni, un gars utiliseCurl
pour envoyer la requête. Cela rendra votre application PHP dépendCurl
. La mise en œuvre est aussi qu'il manque des fonctionnalités telles que l'enregistrement de requête/réponse en-têtes.Une troisième solution est de simplement fermer la connexion juste après la réception de la réponse. Cela peut être fait par la mise en SoapClients attribut
httpsocket
àNULL
dans__doRequest()
,__call()
ou__soapCall()
. Exemple avec__call()
:Il semble dommage qu'il nécessite la désactivation de la keepalive pour éviter cela; j'ai peut-être l'incompréhension des choses, mais ne devrait pas la réponse du serveur d'indiquer combien de temps la connexion peut être gardé en vie, et ensuite de la SoapClient faut juste savoir ne pas la réutiliser après l'expiration du délai de (et, idéalement, de renouer de manière transparente)?
"Le serveur ne prend pas en charge les connexions persistantes (ma réponse).". J'ai eu un buggy serveur à qui je parlais. Il ne gère pas les connexions persistantes correctement et j'ai dû l'éteindre.
OriginalL'auteur HNygard
J'ai eu le même problème et j'ai essayé le suivant par la désactivation de la
keep_alive
.Toutefois, cela ne fonctionne pas pour moi. Ce qui a fonctionné pour moi a été de désactiver le SAVON de cache. Il semble avoir été mise en cache de la mauvaise demandes et après la désactivation j'ai effectivement remarqué que mes demandes ont été d'exécution plus rapide.
Sur un serveur linux, vous pouvez trouver dans votre
/etc/php.ini
fichier.Recherchez
soap.wsdl_cache_enabled=1
et de le modifier poursoap.wsdl_cache_enabled=0
.N'oubliez pas de recharger apache.
service httpd reload
OriginalL'auteur MagentoMan
Un de mes processus au sein du service web a été de prendre du temps pour s'exécuter.
Donc je recevais de type soapfault exeception.
Cela ne répond pas vraiment à la question.
OriginalL'auteur Syed Tayyab Ali