php curl 多线程抓取数据能判断分别来自哪个url吗?
$mh = curl_multi_init(); // 开启多线程
$i = 0;
foreach($url_array as $url) {
$ch = curl_init();
if (IS_PROXY) {
curl_setopt ($ch, CURLOPT_PROXY,'67.215.228.129:8089' );//60.12.226.18
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return don't print
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
curl_setopt($ch, CURLOPT_MAXREDIRS, 7); //HTTp定向级别
curl_multi_add_handle($mh, $ch); // 把 curl resource 放进 multi curl handler 里
$handle[$i++] = $ch;
}
代码如上,开启多线程抓取数据;假如我一次加入10个url,返回给我的是一个有10个结果的数组。我不能判断这些数据分别是来自哪个url的。
请问有什么办法,还是其他哪种语言能实现,多线程抓取的数据还知道来自哪个url的。
分享到:
------解决方案--------------------
你 curl_getinfo($handle[$i]) 就可准确的获得每个 curl 的详细信息
大致是这样的一些(你也可以只读取你感兴趣的部分)[url] => http://blog.51edm.org/content/uploadfile/201303/dc7f1364286796.zip
[content_type] => application/zip
[http_code] => 206
[header_size] => 313
[request_size] => 221
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.047
[namelookup_time] => 0
[connect_time] => 0.047
[pretransfer_time] => 0.047
[size_upload] => 0
[size_download] => 201
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => 201
[upload_content_length] => 0
[starttransfer_time] => 0.078
[redirect_time] => 0
[certinfo] => Array
(
)
[primary_ip] => 119.37.197.49
[primary_port] => 80
相关文章
相关视频
网友评论
文明上网理性发言,请遵守 新闻评论服务协议我要评论
立即提交
专题推荐独孤九贱-php全栈开发教程
全栈 100W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
玉女心经-web前端开发教程
入门 50W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
天龙八部-实战开发教程
实战 80W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习