2016-07-26 124 views
1

我嘗試模擬LinkedIn Web瀏覽器(PHP)的授權。我使用Guzzle Http Client。Guzzle Http客戶端和LinkedIn上的授權

下面是授權碼的一部分:

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

請求成功,返回一個200碼,但我並沒有授權。誰可以面對類似的任務,或者在代碼中漏掉了什麼。我將不勝感激任何建議。

+1

完整訊息數據演示:session_key可以=測試%40gmail.com&session_password = asdasdasdasd&isJsEnabled =假loginCsrfParam = 252be5bc-6822-4020-8a80-439a809f8f73 &sourceAlias = 0_7r5yezRXCiA_H0CRD8sf6DhOjTKUNps5xGTqeX8EEoi&提交=登錄+中....你丟失了太多的東西。 xD –

回答

1

我認爲這個問題與CSRF保護和其他隱藏參數有關。 LinkedIn和其他網站一樣,對於所有情況通常都會返回200 OK,即使出現錯誤,也會在生成的HTML中描述詳細信息。

在你的情況下,最好使用網頁報廢,如Goutte。它使用瀏覽器模擬用戶,因此您不必擔心很多事情(如CSRF保護和其他隱藏字段)。例子可以發現on the main pages,嘗試這樣的事情:

$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' 
)); 

你可以狂飲使用它作爲一個驅動器,但有些網站可能需要的JavaScript(我不知道亞馬遜)。然後,你必須去一個真正的瀏覽器或PhantomJS(一種無頭的Chrome)。

+0

非常感謝! 通過了所有有隱藏參數,結果沒有給出。 我試過Goutten,直到正常航班)再次感謝。 –

相關問題