php多线程抓取网页(HTTP命令行工具模拟/GET等HTTP工具(组图))

优采云 发布时间: 2021-10-11 11:20

  php多线程抓取网页(HTTP命令行工具模拟/GET等HTTP工具(组图))

  1、 CURL 一步请求

  CURL 扩展是一个强大的 HTTP 命令行工具,可以模拟 POST/GET 等 HTTP 请求,然后获取和提取数据,并将其显示在“标准输出”(stdout)上。

  例子:

  复制代码代码示例:

  $cl = curl_init();

  $curl_opt = array(CURLOPT_URL,'#39;,

  CURLOPT_RETURNTRANSFER, 1,

  CURLOPT_TIMEOUT, 1,);

  curl_setopt_array($cl, $curl_opt);

  curl_exec($ch);

  curl_close($ch);

  由于CUROPT_TIMEOUT属性的最小值为1,这意味着客户端必须等待1秒,这也是使用CURL方法的缺点

  2、使用popen()函数实现异步请求

  语法格式:popen(command,mode)

  代码:

  复制代码代码示例:

  $file = popen("/bin/ls","r");

  //这里是要执行的代码

  //...

  pclose($file);

  popen() 函数直接向进程打开一个管道,速度快,响应迅速。但是这个函数是单项,不管是读还是写,并发数大的话,会产生大量的进程,给服务器造成负担。

  此外,如示例中所示,必须使用 pclose() 在结束后关闭程序。

  3、使用fscokopen()函数实现异步请求

  该函数用于socket编程,如php邮件发送功能的开发。在使用此功能之前,您必须在 PHP.ini 中启用 allow_url_fopen 选项。此外,您必须在标题部分可用时手动拼接它。

  代码:

  复制代码代码示例:

  $fp = fsockopen("/demo.php", 80, $errno, $errstr, 30);

  如果 (!$fp) {

  echo "$errstr ($errno)

  \n";

  } 别的 {

  $out = "GET /index.php / HTTP/1.1\r\n";

  $out .= "主机:\r\n";

  $out .= "连接:关闭\r\n\r\n";

  fwrite($fp, $out);

  /*这里忽略执行结果

  *可以在测试期间打开

  而 (!feof($fp)) {

  回声 fgets($fp, 128);

  }*/

  fclose($fp);

  }

  PHP 本身没有多线程,但是可以使用其他方式来实现多线程的效果。

  上面列出的三种方法各有优缺点。在使用它们时,您可以根据程序的需要选择最好的。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线