我知道这听起来像黑帽SEO的一些尝试,也许这个问题的来源有一些与此有关的东西,但我问这个的原因是因为这个问题真的让我想知道是不是可能的。
如果是,如何在不打开相同数量的新页面的情况下如何模拟大量唯一链接的打开?
任务是这样的 - 假设我们有一个包含5,000个链接的数据库,通过点击按钮,我想模拟打开每个链接,所以如果网站有一个网络直播,它会增加(页面的开头会被检测到)但同时在用户的页面上不会出现任何内容,它将保持不变,无需打开5,000个新页面或一次又一次地重写同一页面。
如果这个问题不在程序员之内,我很抱歉。我出于好奇而提出这个问题,并且很高兴看到意见,如果这真的有可能,怎么可能实现。
由于
Leron
答案 0 :(得分:2)
这可以通过简单的JavaScript完成:
var myLinks = ['http://www.example.com', 'http://www.example.org'];
// run this in the on click handler of the <a> tag
var imgs = [];
for (var i = 0, link; link = myLinks[i]; ++i) {
imgs[i] = new Image();
imgs[i].onload = imgs[i].onerror = function() {
// do stuff when loading is done
}
imgs[i] = link; // start loading
}
工作原理 加载图像就像任何其他HTTP请求一样,但它更加优化,因为浏览器中的图像加载得到了并行化(达到一定程度)。这些图片都无法加载,因为它们不会被提供给任何图像,但这没关系,因为你不在乎。
<强>注意事项强>
发送到服务器的HTTP标头将发送Accept
标头来加载图像,因此它不像页面加载;但是,大多数服务器都不关心它。
浏览器控制台可能会显示许多报告图像无法加载的消息(显然,因为HTML不是图像)。
答案 1 :(得分:1)
Here我找到了一个很好的脚本来打开PHP的URL。它使用fsockopen()。代码是:
<?php
function fetch_page($url)
{
/* get hostname and path */
$host = parse_url($url, PHP_URL_HOST);
$path = parse_url($url, PHP_URL_PATH);
if (empty($path)) {
$path = "/";
}
/* Build HTTP 1.0 request header. Defined in RFC 1945 */
$headers = "GET $path HTTP/1.0\r\n"
. "User-Agent: myHttpTool/1.0\r\n\r\n";
/* open socket connection to remote host on port 80 */
$fp = fsockopen($host, 80, $errno, $errmsg, 30);
if (!$fp) {
/* ...some error handling... */
return false;
}
/* send request headers */
fwrite($fp, $headers);
/* read response */
while(!feof($fp)) {
$resp .= fgets($fp, 4096);
}
fclose($fp);
/* separate header and body */
$neck = strpos($resp, "\r\n\r\n");
$head = substr($resp, 0, $neck);
$body = substr($resp, $neck+4);
/* omit parsing response headers */
/* return page contents */
return($body);
}
?>
只需在循环中调用fetch_page()即可模拟5,000次点击。