2017-07-02 2 views
0

Was ich versuche, ist, sich an einer externen API anmelden und eine JSON-Datei abrufen. Dazu benutze ich Guzzle in Laravel.Guzzle Laravel - Anmeldung mit POST-Anfrage

Ich habe Setup einen Controller, dies zu tun:

$client = new Client([ 
     'base_uri' => 'https://www.space-track.org', 
     'timeout' => 2.0, 
    ]); 

ich die JSON-Datei zugreifen mit:

$response = $client->request('GET', '/basicspacedata/query/class/boxscore'); 

Um die JSON-Datei erhalte ich verpflichtet bin, an die API anmelden. Das API-Tutorial sagt mir:

Login by sending a HTTP POST request ('identity=your_username&password=your_password') to: https://www.space-track.org/ajaxauth/login 

Was ich nicht tun kann, ist mit Guzzle in die API einloggen. Ich habe versucht, ein paar Guzzle-Tutorials zu folgen und das 'auth'-Array zu verwenden, bei dem keine funktionierte.

Grundsätzlich kann ich mich nicht mit Guzzle in die API einloggen.

+0

Warum nicht einfach die Login-Parameter schreiben wie '$ client-> post ('https://www.space-track.org/ erlaubt ajaxauth/login? identity = ihr_benutzername & password = ihr_passwort ') ', dann token oder so ähnlich. – hasandz

Antwort

1

Hier ist eine Grundströmung, die

// Initialize the client 
$api = new Client([ 
    'base_uri' => 'https://www.space-track.org', 
    'cookies' => true, // You have to have cookies turned on for this API to work 
]); 

// Login 
$api->post('ajaxauth/login', [ 
    'form_params' => [ 
     'identity' => '<username>', // use your actual username 
     'password' => '<password>', // use your actual password 
    ], 
]); 

// Fetch 
$response = $api->get('basicspacedata/query/class/boxscore/format/json'); 
// and decode some data 
$boxscore = json_decode($response->getBody()->getContents()); 

// And logout 
$api->get('ajaxauth/logout'); 

dd($boxscore); 

Jetzt arbeiten sollte, wenn es nicht eine einmalige Anfrage ist und Sie planen auf extensiv diese API verwenden Sie diese „Hässlichkeit“ in der eigenen Service-Klasse wickeln können, dass stellt eine sinnvolle interne API, die Sie schreiben dann etwas entlang der Linien von

$spaceTrack = new App\Services\SpaceTrack\Client(); 
$boxscore = $spaceTrack->getBoxscore(); 
dd($boxscore);