php多线程抓取网页(HTTP命令行工具模拟/GET等HTTP工具(组图))
优采云 发布时间: 2021-10-11 11:20php多线程抓取网页(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 本身没有多线程,但是可以使用其他方式来实现多线程的效果。
上面列出的三种方法各有优缺点。在使用它们时,您可以根据程序的需要选择最好的。