it-swarm.com.de

Nicht erfasste SoapFault-Ausnahme: [HTTP] Fehler beim Abrufen von http-Headern

Ich versuche, eine Soap-Verbindung zu Magentos Web-Services herzustellen. Beim Versuch, eine Instanz der Soap-Client-Klasse zu erstellen, wird jedoch eine Fehlermeldung angezeigt. Ich kann die wsdl-Datei in firefox ohne Probleme anzeigen und ich kann sehen, wie php die Anforderung für die wsdl in den Apache-Protokollen macht, aber es schlägt immer noch fehl. Nusoap kann eine Verbindung herstellen. 

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

Der Fehler ist 

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

Vielen Dank

23
Remy

Versuchen Sie zu setzen:

default_socket_timeout = 120

in Ihrer php.ini-Datei.

35

Haben Sie versucht, etwas hinzuzufügen?

'trace'=>1,

zu den SoapClient-Erstellungsparametern und dann:

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

um zu sehen was los ist

11
hegemon

Dieser Fehler kann auf dem Client auftreten, wenn auf dem Server ein Problem vorliegt. Wenn der SOAP -Server beispielsweise ein PHP -Skript mit einem Parser-Fehler ist, schlägt der Client mit dieser Nachricht fehl.

Wenn Sie die Kontrolle über den Server haben, müssen Sie Ihr Apache-Fehlerprotokoll auf dem Computer abschließen, der den SOAP -Server hostet. Auf CentOS finden Sie dies in/var/log/httpd/error_log. Der Befehl lautet also:

tail -f/var/log/httpd/error_log

Aktualisieren Sie jetzt den Client und achten Sie auf die Fehlermeldung. Eventuelle PHP Fehler mit dem Serverskript werden angezeigt.

Hoffe das hilft jemandem.

6
David Hurst

Ich hatte das gleiche Problem. 
Ich habe es als CLI ausgeführt. PHP lief also immer und es musste nach einiger Zeit immer wieder neu aufgerufen werden.
Der Fehler, den ich gemacht habe, war das Singleton-Pattern. Ich dachte, der Einsatz von Singleton würde zu einer Leistungssteigerung führen, aber ich habe es gewagt 

Error Fetching http headers in ...

Ich habe es behoben, indem ich für jeden Aufruf ein neues Saop-Objekt erstellt habe.

4
Rahul Prasad

Es geht mir nicht um Ihre PHP -Konfiguration, aber bis PHP 5.2.6, hat PHP einige Probleme mit dem SOAP - Client:

Fehler # 41983 - Fehler beim Abrufen von http-Headern

Bug #41983

2
Posto

Wenn dies ein mit Magento zusammenhängendes Problem ist, sollten Sie die automatische Neuindizierung deaktivieren, da dies dazu führen kann, dass der Socket ein Timeout (oder ein Ablaufdatum) hat. Sie können es wieder aktivieren, sobald das Skript seine Aufgaben abgeschlossen hat. Das Erhöhen des Standard-Socket-Timeouts in php.ini ist ebenfalls eine gute Idee.

1

Bitte aktualisieren Sie Ihre php.ini mit 

default_socket_timeout = 120

Sie können Ihre eigene php.ini erstellen, wenn in php ein CGI anstelle eines Apache-Moduls installiert ist

0
Shahzeb chohan

In meinem Apache-Fehlerprotokoll sah ich: 

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

Also entfernte ich den gesamten Inhalt meiner größten Protokolldatei 2.1GB /var/log/system.log. Jetzt funktioniert alles.

0
saintsjd

Ich stand vor demselben Problem und versuchte alle oben genannten Lösungen. Leider funktioniert nichts.

  1. Sockel-Timeout (nicht bearbeitet)
  2. Benutzeragent (nicht bearbeitet)
  3. SoapClient-Konfiguration, cache_wsdl und Keep-Alive etc .. 

Dieses ganze Kopfspiel, das wir passieren. Ich habe mein Problem mit dem Hinzufügen der Eigenschaft compression header gelöst. Dies ist tatsächlich erforderlich, wenn Sie eine Antwort im gzip komprimierten Format erwarten.

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

Ich hoffe es hilft.

Viel Glück.

0
Sanjay Mohnani

In der PHP-Version liegt ein Problem unter 5.2.6 vor. Möglicherweise müssen Sie die Version von PHP aktualisieren.

0
obiyoda