问题是这样的: 我用curl多线程来验证代理....for($i=0;$i<$maxconn;$i++) /*循环加入句柄*/
{
add_curl_handle($mh,$proxyarr[$linknum],$limittime); /*添加批处理的url*/
$linknum++;
}
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) /*处理下一个响应*/
{
if (curl_multi_select($mh) != -1) /*选择是响应的句柄*/
{
do
{
$mrc = curl_multi_exec($mh, $active); /*返回活动的链接*/
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
if ($mhinfo = curl_multi_info_read($mh)) /*返回活动的句柄*/
{
$chinfo = curl_getinfo($mhinfo['handle']); /*获得请求的数据*/
if($chinfo['http_code']==200) /*判断是否为200状态*/
{
__________________________________________________________________________
现在重点是这里应该怎么写才能获取到这个验证成功的代理?这里的语句应该怎么写,好像curl_getinfo里面没有获取句柄使用的代理的功能..求高手指教.
__________________________________________________________________________ }
}
curl_multi_remove_handle($mh, $mhinfo['handle']); /*移除句柄*/
curl_close($mhinfo['handle']); /*关闭请求*/
if(add_curl_handle($mh,$linkarray[$linknum],$limittime)&&$linknum<count($linkarray)) /*判断添加下一个句柄*/
{
do
{
$mrc = curl_multi_exec($mh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
$linknum++;
}
}
}curl多线程 代理 验证 proxycurl多线程代理验证
{
add_curl_handle($mh,$proxyarr[$linknum],$limittime); /*添加批处理的url*/
$linknum++;
}
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) /*处理下一个响应*/
{
if (curl_multi_select($mh) != -1) /*选择是响应的句柄*/
{
do
{
$mrc = curl_multi_exec($mh, $active); /*返回活动的链接*/
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
if ($mhinfo = curl_multi_info_read($mh)) /*返回活动的句柄*/
{
$chinfo = curl_getinfo($mhinfo['handle']); /*获得请求的数据*/
if($chinfo['http_code']==200) /*判断是否为200状态*/
{
__________________________________________________________________________
现在重点是这里应该怎么写才能获取到这个验证成功的代理?这里的语句应该怎么写,好像curl_getinfo里面没有获取句柄使用的代理的功能..求高手指教.
__________________________________________________________________________ }
}
curl_multi_remove_handle($mh, $mhinfo['handle']); /*移除句柄*/
curl_close($mhinfo['handle']); /*关闭请求*/
if(add_curl_handle($mh,$linkarray[$linknum],$limittime)&&$linknum<count($linkarray)) /*判断添加下一个句柄*/
{
do
{
$mrc = curl_multi_exec($mh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
$linknum++;
}
}
}curl多线程 代理 验证 proxycurl多线程代理验证
这样只要某个 $mh 项能正常返回,就表示对应的代理是正确可用的CURLOPT_PROXY 设置代理地址和端口
CURLOPT_PROXYUSERPWD 设置代理的用户名和口令你也可以用
CURLOPT_HTTPPROXYTUNNEL、CURLOPT_PROXYAUTH、CURLOPT_PROXYPORT、CURLOPT_PROXYTYPE
做细节设置
嗯,你的后两节写的有些古怪
我一般这样写:
$mh = curl_multi_init();
//加入单个的curl
foreach ($urls as $i => $url) {
$conn[$i] = curl_init($url);
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER,1);
curl_multi_add_handle($mh, $conn[$i]);
}
//等待全部完成
do {
curl_multi_exec($mh, $active);
}while($active);//处理每个curl的返回
foreach ($urls as $i => $url) {
$info = curl_getinfo($conn[$i]);//这里就是了
curl_close($conn[$i]);
}$conn 和 $urls 是一一对应的
$chinfo = curl_getinfo($mhinfo['handle']);
$chinfo['url']肯定就会带有这个$linknum而你通过$linknum一定知道代理是什么