2016-07-26 25 views
1

Ich versuche, die Autorisierung LinkedIn Webbrowser (PHP) zu simulieren. Ich benutze Guzzle Http Client.Guzzle Http Client und Autorisierung in LinkedIn

Hier ist ein Teil des Autorisierungscodes:

use GuzzleHttp\Client as LinkedinClient; 
use PHPHtmlParser\Dom as Parser; 

public function authLinkedin() 
{ 
    $client = new LinkedinClient(['base_url' => 'https://www.linkedin.com']); 

    try { 
     $postData = [ 
      'session_key'  => 'My_email', 
      'session_password' => 'My_password', 
      'action' => 'login' 
      ]; 

     $request = $client->createRequest('POST', '/uas/login', ['body' => $postData, 'cookies' => true]); 

     $response = $client->send($request); 

     if ($response->getStatusCode() === 200) { 
      $parser = new Parser(); 
      $parser->load($client->get('https://www.linkedin.com/', ['cookies' => true])->getBody()); 

      return $parser; 
     } else { 
      Log::store("Authorization error", Log::TYPE_ERROR, $request->getStatusCode()); 
      return null; 
     } 
     return $request; 
    } catch (Exception $ex) { 
     Log::store("Failure get followers", Log::TYPE_ERROR, $ex->getMessage()); 

     return null; 
    } 
} 

Der Antrag erfolgreich ist, gibt einen 200-Code, aber ich habe eine Autorisierung nicht. Wer kann mit einer ähnlichen Aufgabe konfrontiert werden, oder im Code etwas verpasst haben. Ich würde mich über jeden Hinweis freuen.

+1

Voll Post-Daten Demo: session_key = test% 40gmail.com & session_password = asdasdasdasd & isJsEnabled = false & loginCsrfParam = 252be5bc-6822-4020-8a80-439a809f8f73 & sourceAlias ​​= 0_7r5yezRXCiA_H0CRD8sf6DhOjTKUNps5xGTqeX8EEoi & ​​submit = Sign + in .... Sie zu viele Dinge fehlen. xD –

Antwort

1

Ich denke, dass das Problem mit CSRF-Schutz und anderen versteckten Parametern ist. LinkedIn, wie andere Websites, gibt normalerweise 200 OK für alle Situationen, auch für einen Fehler, zurück und beschreibt Details in resultierendem HTML.

In Ihrem Fall ist es besser, einen Web-Scrapper wie Goutte zu verwenden. Es emuliert einen Benutzer mit einem Browser, so dass Sie sich nicht um viele Dinge kümmern müssen (wie CSRF-Schutz und andere versteckte Felder).

$crawler = $client->request('GET', 'https://www.linkedin.com'); 
$form = $crawler->selectButton('Sign In')->form(); 
$crawler = $client->submit($form, array(
    'login' => 'My_email', 
    'password' => 'My_password' 
)); 

Sie können es mit Guzzle als Fahrer, aber einige Websites möglicherweise erforderlich, JavaScript (Ich bin nicht sicher über Amazon): Beispiele können on the main pages, versuchen Sie so etwas wie dieses zu finden. Dann müssen Sie zu einem echten Browser oder PhantomJS (eine Art kopflose Chrome) gehen.

+0

Vielen Dank! Ging durch alle haben versteckte Parameter, das Ergebnis ist nicht gegeben. Ich habe Goutten versucht, bis zum normalen Flug) Danke nochmal. –