我需要创建一个脚本来发出 HTTP 请求并模拟浏览器在 cookie 管理方面的行为。这意味着它可以访问该“页面”设置的所有 cookie(服务器设置 cookie、异步客户端设置 cookie、每个域的 cookie。)
我的意思是,使用控制台检查页面,我可以看到该页面上所有域的所有 cookie。
我正在想办法从我的代码中做到这一点。
我几乎确定我必须以某种方式运行页面的 javascript 并模拟 DOM 行为(考虑在 node.js 脚本中使用 jsDom )。
但是,但是。还是有很多疑问。关于如何通过模拟浏览器行为拦截所有 cookie 有什么建议吗?
任何有关如何实现它的建议将不胜感激。
对于那些有时间的人
我对如何实现它有一个奇怪的想法:
重载处理 HTTP 响应的 xhr 对象的函数原型(prototype)(我的意思是制作类似: this )来检查所有客户端加载的 cookie 是否有意义?
我需要它在任何页面上工作,即使是那些不使用 native XMLHttpRequest 对象的页面。对此有什么建议吗?
最佳答案
浏览器只是向服务器发送 HTTP 请求,您不一定需要加载 DOM。如果您可以对要发送的请求进行逆向工程,则可以轻松模拟网页或工作流程的行为。当您从 PHP 使用 cURL 发送请求时,您需要将 cookie 存储在 cookie jar 中,以便跨请求维护 cookie。像这样的事情应该让你开始:
function load($url, $postData = array())
{
$useragent = "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
curl_setopt($curl, CURLOPT_POST, !empty($postData));
if(!empty($postData)) curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
$page = curl_exec ($curl);
curl_close ($curl);
return $page;
}
如果你想运行一个在 cookie jar 中维护 cookie 的 headless 浏览器,我会推荐像 PhantomJS 这样的东西。然后,您可以加载页面并在页面上下文中执行代码:
"use strict";
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.open("http://phantomjs.org/", function(status) {
if (status === "success") {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function() {
console.log("$(\".explanation\").text() -> " + $(".explanation").text());
});
phantom.exit(0);
});
} else {
phantom.exit(1);
}
});
代码可以在Github上找到:https://github.com/ariya/phantomjs/blob/master/examples/phantomwebintro.js
关于javascript - 如何实现网站的cookies scraper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35367965/