使用PHP的HttpRequest登录网站?

时间:2011-11-04 23:00:10

标签: php httprequest linkedin

我正在寻找一种在LinkedIn上搜索商家“X”的方法,这需要有效的登录会话。我正在使用PHP的HttpRequest对象发出Http请求,但我对处理会话数据/ cookie以了解如何查明我的错误并不熟悉。

    $loginURL = "https://www.linkedin.com/uas/login-submit";
    $loginPostData = array("session_key" => "mylogin@mydomain.com",
                           "session_password" => "itsasecret",
                           "source_app" => "",
                           "signin" => "",
                           "session_redirect" => "",
                           "csrfToken" => "",
                           "sourceAlias" => "",
    );

    $httpRequest = new HttpRequest($loginURL, HttpRequest::METH_POST);
    $httpRequest->setContentType("application/x-www-form-urlencoded");
    $httpRequest->addPostFields($loginPostData);
    $httpRequest->setOptions(array("redirect" => 10));
    $httpMessage = $httpRequest->send();
    $responseBody = $httpMessage->getBody());

我将$ responseBody写入文件并在浏览器中打开它,但它只包含一个带登录字段的通用LinkedIn页面。使用“篡改数据”扩展名来修复,我可以看到以下请求标头允许firefox加载会话可查看的网页:

Host=www.linkedin.com
Content-Type=application/x-www-form-urlencoded
Content-Length=124
POSTDATA=source_app=&session_key=mylogin@mydomain.com&session_password=itsasecret&signin=&session_redirect=&csrfToken=&sourceAlias=

我得到的数据也有些奇怪:我希望看到类似“无效的用户名或密码”,但我得到了默认的linkedin.com页面。

1 个答案:

答案 0 :(得分:0)

实际上查看linkedin的代码时,您需要发送一些隐藏的输入作为POST数据,因为您的请求中没有一个或多个这些值,您获得了相同的登录页面...

复制&来自linkedin的粘贴

 <input type="hidden" name="source_app" value="">
 <input type="hidden" name="trk" value="guest_home_login">
 <input type="hidden" name="session_redirect" value="" id="session_redirect-login"><input type="hidden" name="csrfToken" value="ajax:9034582961576232024" id="csrfToken-login"><input type="hidden" name="sourceAlias" value="0_7r5yezRXCiA_H0CRD8sf6DhOjTKUNps5xGTqeX8EEoi" id="sourceAlias-login">