问题是这样的:  我用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多线程代理验证

解决方案 »

  1.   

    你的 $proxyarr[$linknum] 是如何赋值的?一般宜做成通过代理访问同一个网站(不知道你是否是这么做的)
    这样只要某个 $mh 项能正常返回,就表示对应的代理是正确可用的CURLOPT_PROXY 设置代理地址和端口
    CURLOPT_PROXYUSERPWD 设置代理的用户名和口令你也可以用
    CURLOPT_HTTPPROXYTUNNEL、CURLOPT_PROXYAUTH、CURLOPT_PROXYPORT、CURLOPT_PROXYTYPE
    做细节设置
      

  2.   

    你的 $proxyarr 不是顺序加入 $mh 的吗?
    嗯,你的后两节写的有些古怪
    我一般这样写:
    $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 是一一对应的
      

  3.   

    本帖最后由 xuzuning 于 2013-06-19 11:19:09 编辑
      

  4.   

    通过curl好像没有好的方式,你为什么不在请求的url是多传递一个参数,参数的内容就是$linknum,在获取的时候可以通过获取
    $chinfo = curl_getinfo($mhinfo['handle']);
    $chinfo['url']肯定就会带有这个$linknum而你通过$linknum一定知道代理是什么
      

  5.   

    过程有些波折  不过最后还是解决了 ..谢谢斑竹  还有下面"hnxxwyq"