2016-08-12 1 views
2

In meiner Yii2-Anwendung versuche ich Daten aus einer REST-API zu lesen, die durch eine HTTP-Basic-Auth geschützt ist. Zusätzlich wird ein Proxy benötigt, um die REST API zu verbinden. Also wählte ich die Yü Httpclient-Modul diesen Aufruf zu behandeln:yii2-httpclient mit Basic Auth und Proxy-Einstellungen

$client = new Client(['baseUrl' => 'http://my.example.com']); 
$response = $client->createRequest() 
     ->setMethod('get') 
     ->setUrl('api/session') 
     ->addHeaders(['Authorization' => 'Basic '.base64_encode("user:password")]) 
     ->setOptions([ 
      'proxy' => 'proxy.server:8000', 
      'timeout' => 5, 
     ]); 

diesen Code laufen, bekomme ich eine Bad URL in proxy request Fehlermeldung den Server bilden. Aber wenn ich die URL vom Code zum Browser (der auch mit dem Proxy verbunden ist) kopieren, funktioniert alles gut: das Basic-Auth-Fenster erscheint.

Gibt es einen Fehler beim Setzen des Tags Authorization für den Header?

Antwort

2

Nach der Arbeit an einem Tag auf dieses Problem, in der Antwort gefunden. Nur eine Minute nach dem Stellen meiner Frage, aber ich mag diese Frage in dem Fall, dass jemand das gleiche Problem hat.

Antwort: Der yii2 httpclient verwendet 2 verschiedene Transportbibliotheken: Streams (die ohne eine zusätzliche PHP-Erweiterung arbeitet und als Standard eingestellt ist) und cURL.

Um auf cURL als "Transport-Typ" zu wechseln, funktioniert der obige Code gut!

$this->client = new Client([ 
      'baseUrl' => 'http://my.example.com', 
      'transport' => 'yii\httpclient\CurlTransport'])