4

我知道这听起来像是对黑帽 SEO 的一些尝试,也许这个问题的来源与这个想法很接近,但我问这个的原因是因为这个问题真的让我想知道这是否可能。

如果是这样,如何在不打开相同数量的新页面的情况下模拟打开大量唯一链接?

任务是这样的 - 假设我们有一个包含 5,000 个链接的数据库,通过单击一个按钮,我想模拟打开每个链接,因此如果网站有一个网络计数器,它将增加(将检测到页面的打开)但与此同时,用户页面上不会出现任何内容,并且会保持原样,无需打开 5,000 个新页面或一次又一次地重新加载同一页面。

如果这个问题超出了程序员的范围,我很抱歉。我是出于好奇而问的,如果这真的可能以及如何实现,我很乐意阅读意见。

谢谢

勒隆

4

2 回答 2

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 不是图像)。

于 2012-06-02T14:01:25.517 回答
1

在这里,我找到了一个从 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 次点击。

于 2012-06-02T13:49:17.873 回答