我正在寻找一种在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页面。使用firefix的"篡改数据"扩展,我可以看到以下请求头允许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页面。
实际上看看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">