2016-07-26 119 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,直到正常航班)再次感谢。 –

相关问题