使用PHP CURL

时间:2016-07-22 15:17:08

标签: php curl cookies

注意:我知道这个问题有点“过于具体”,但请帮忙,我不知道该转向何处。

这是一个有点非常难以回答的问题,但我不知道该去哪里......任何帮助都会非常感激。

我正在尝试使用PHP curl从需要您登录的网站获取html,使用cookie并使用csrf令牌。总的来说,我可以使用他们的登录页面登录并从他们的登录页面获取cookie,但是当我尝试访问他们网站中的某些页面时,我从他们的服务中收到以下错误。其他页面工作正常。

“我们很抱歉!发生了一些事情,我们目前无法完成您的请求。等待几分钟再试一次,通常可以解决问题。”

ALONG WITH:

Time: 7/22/2016, 10:52:36 AM
Reference id: undefined
Url: undefined
Browser: undefined
undefined

非常通用且没有有用的信息,所以我真的不知道该怎么做 - 或者即使它是我的代码或他们的服务器或两者都有问题。当我尝试从浏览器正常登录时,我可以访问该页面。你能帮忙找到解决这个问题的方法吗?

许多进一步的参考信息:我试图从中提取html的页面是https://www.edline.net/UserDocList.page。在正常的登录过程中,当我登录时,如果我在URL栏中键入它,它会重定向到https:// www。 edline。 net / UserDocList.page?vsur=“”其中“”是一个看似随意的字符串,用户在网站上找不到其他地方。此外,以下是我尝试正常访问页面时发送的请求标头的副本:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en
Connection:keep-alive
Cookie:BIGipServerprod_pool=2009639104.20480.0000; route=route.01; JSESSIONID=53ACA25565D22D9154B3A751A2099FA2; ENSID=d027dfe4-c595-4f82-aabf-6ee2831c50fc; LLG=false; XT=1469199593977; pgt=c1469199601532t
DNT:1
Host:www.edline.net
Referer:https://www.edline.net/UserDocList.page
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36

他们添加了“查询字符串参数”:vusr:ae4776f9b4fa1bf53745a49013852ec4。

此外,对其完整加载的正确页面https://www.edline.net/UserDocList.page?vusr=ae4776f9b4fa1bf53745a49013852ec4的分析显示存在以下形式:

<form name="EventForm" method="post" action="/post/UserDocList.page" style="display: none;">
 <input type="hidden" name="invokeEvent" value="" />
 <input type="hidden" name="eventParms" value="" />
 <input type="hidden" name="sessionRenewalEnabled" value="yes" />
 <input type="hidden" name="sessionRenewalIntervalSeconds" value="300" />
 <input type="hidden" name="sessionRenewalMaxNumberOfRenewals" value="25" />
 <input type="hidden" name="sessionIgnoreInitialActivitySeconds" value="90" />
 <input type="hidden" name="sessionHardTimeoutSeconds" value="1200" />
 <input type="hidden" name="ajaxRequestKeySuffix" value="0" />
 <input type="hidden" name="csrfToken" value="pImuc5n1fmYtvDHlZ9BCXf3geewbtwVNP8GwM9keFOGKCjDZto75BUsPuhwZk53WC07zcotxK40ez780gs2SwD2Y5Mt8mVGwYjWPACr0XkniVd1djN2Ug30Ith8UVAEl" />

此外,这里是我存档的cookie(每次用户登录MY站点后生成的刷新):

www.edline.net  FALSE   /   FALSE   0   ENSID   c3fd35f6-3366-47f9-b64c-179a5d715f1b
www.edline.net  FALSE   /   FALSE   0   BIGipServerprod_pool    2160634048.20480.0000
www.edline.net  FALSE   /   FALSE   0   route   route.00
www.edline.net  FALSE   /   FALSE   0   JSESSIONID  DF6CE0BD455B27011868E03C33B39CA3
www.edline.net  FALSE   /   FALSE   0   pgt c1469199156590t
www.edline.net  FALSE   /   FALSE   0   LLG false
www.edline.net  FALSE   /   FALSE   0   XT  1469199156537

用于尝试访问该页面的代码:

//$temp_csrf_token = $file->find('input[name=csrfToken]');
//$csrf_token = $temp_csrf_token[0]->value;

curl_setopt($session, CURLOPT_URL, 'https://www.edline.net/UserDocList.page');
//curl_setopt($session, CURLOPT_POST, true);
//curl_setopt($session, CURLOPT_POSTFIELDS, http_build_query(array('invokeEvent'=>'', 'eventParms'=>'', 'sessionRenewalEnabled'=>'yes', 'sessionRenewalIntervalSeconds'=>'300', 'sessionRenewalMaxNumberOfRenewals'=>'25', 'sessionIgnoreInitialActivitySeconds'=>'90', 'sessionHardTimeoutSeconds'=>'1200', 'ajaxRequestKeySuffix'=>'0', 'csrfToken'=>$csrf_token)));
curl_setopt($session, CURLOPT_TIMEOUT, 0);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_FOLLOWLOCATION, true);
//curl_setopt($session, CURLOPT_COOKIE, "BIGipServerprod_pool=2177411264.20480.0000; route=route.01; JSESSIONID=81A1CD15160AB9B64F5274C90526CD67; ENSID=ebd459f7-8d44-4987-aded-f3be65714f7f; LLG=false; XT=1469140120196; pgt=c1469140126591t");
curl_setopt($session, CURLOPT_COOKIEJAR, realpath($temporary_cookie_file));
curl_setopt($session, CURLOPT_COOKIEFILE, realpath($temporary_cookie_file));
curl_setopt($session, CURLOPT_HEADER, false);
$results = curl_exec($session);

print($results);
die();

从注释掉的代码中我可以看到,我尝试过几个我认为可能解决问题的方法: (1)手动从文件中获取cookie并通过CURLOPT_COOKIE发送,如果CURLOPT_COOKIEJAR / FILE可能是问题。*** (2)从登录时生成的页面获取CSRF令牌,并将其传递到“post / UserDocList.page”的“表单”以及表单的其他值。 (3)模仿“常规”浏览器的标题,认为他们有某种机器人检测系统。

***我知道,在代码中,似乎我手动硬编码,但我也通过阅读新生成的cookie文件来尝试它。

这些都没有奏效。我不知道问题出在哪里或现在该做什么。该网站的其他页面工作正常,但值得注意的是,这些页面不像这样“重定向”,并且包含较少的用户特定数据。

如果您需要更多信息:如果需要,您可以使用我的凭据登录此网站www.edline.net/Index.page。请,任何帮助将不胜感激。获取此页面的HTML对我的网站功能至关重要。

谢谢!

0 个答案:

没有答案