2017-10-23 1 views
1

Beschreibung

Ich verwende Guzzle in meinem Laravel Projekt. Ich hatte einen Speicherabsturz, als ich eine Anfrage an eine API stelle, die eine große Nutzlast zurückgibt.cURL Fehler 28: Operation timed out nach 2000 Millisekunden mit 7.276.200 von 23.000.995 Bytes empfangen

Ich habe dies auf der Oberseite meiner CURL.php Klasse. Ich habe get(), dass ich guzzle benutze.

use GuzzleHttp\Exception\GuzzleException; 
use GuzzleHttp\Client; 
use GuzzleHttp\FORCE_IP_RESOLVE; 
use GuzzleHttp\DECODE_CONTENT; 
use GuzzleHttp\CONNECT_TIMEOUT; 
use GuzzleHttp\READ_TIMEOUT; 
use GuzzleHttp\TIMEOUT; 

class CURL { 

    public static function get($url) { 

     $client = new Client(); 
     $options = [ 
      'http_errors' => true, 
      'force_ip_resolve' => 'v4', 
      'connect_timeout' => 2, 
      'read_timeout' => 2, 
      'timeout' => 2, 
     ]; 
     $result = $client->request('GET',$url,$options); 
     $result = (string) $result->getBody(); 
     $result = json_decode($result, true); 
     return $result; 

    } 

    ... 

} 

Wenn ich es so in meiner Anwendung nennen, ist es eine große Nutzlast fordern (30000)

$url = 'http://site/api/account/30000'; 
$response = CURL::get($url)['data']; 

ich diesen Fehler 28

cURL Fehler wurde immer: Operation timed out nach 2000 Millisekunden mit 7276200 von 23000995 empfangenen Bytes (siehe http://curl.haxx.se/libcurl/c/libcurl-errors.html)

Wie vermeide ich das?


Sollte ich diese Einstellungen erhöhen?

'connect_timeout' => 2, 
'read_timeout' => 2, 
'timeout' => 2, 

Fragen

Wie würde man dies weiter gehen über und zu debuggen?


Ich bin offen für alle Vorschläge in diesem Moment.

Alle Hinweise/Vorschläge/hilft auf diesem werden sehr geschätzt!

+1

Ja, erhöhen Sie Ihre Timeouts. 2 Sekunden scheinen nicht lang genug zu sein. – aynber

+0

ohh ok. Ich dachte, dass das sonst diesen Fehler verursacht? – ihue

+0

Nr. 'Zeitüberschreitung der Operation nach 2000 Millisekunden mit 7276200 von 23000995 empfangenen Bytes 'klingt wie es in der Lage ist, eine Verbindung mit dem Remote-Server herzustellen, und es hat begonnen, Daten herunterzuladen, aber nach' 2000 Millisekunden 'abgeschnitten, was 2 Sekunden ist. 'read_timeout' und' timeout' müssen viel länger sein. Versuchen Sie irgendwo zwischen 30-180 Sekunden, oder geben Sie es einfach nicht an und erlauben Sie es, der Serverstandard zu sein. – aynber

Antwort

1

Ja, Sie müssen read_timeout und timeout erhöhen. Der Fehler ist klar, Sie haben nicht genug Zeit, um die Antwort zu erhalten (der Server ist langsam, Netzwerk oder etwas anderes, spielt keine Rolle).

Wenn es möglich ist, ist die Erhöhung der Timeouts der einfachste Weg.

Wenn der Server die Paginierung unterstützt, ist es eine bessere Möglichkeit, die Daten nach Teilen abzufragen.

Sie können auch Async-Abfragen in Guzzle verwenden und etwas an Ihren Endbenutzer senden, während Sie auf die Antwort von der API warten.

Verwandte Themen