zoukankan      html  css  js  c++  java
  • curl 同时发送多个请求

    // 创建一对cURL资源
    $ch1 = curl_init();
    $ch2 = curl_init();
    
    // 设置URL和相应的选项
    curl_setopt($ch1, CURLOPT_URL, "http://test.cm/a.php/");
    curl_setopt($ch1, CURLOPT_HEADER, 0);
    curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
    
    curl_setopt($ch2, CURLOPT_URL, "http://testd.cm/b.php");
    
    curl_setopt($ch2, CURLOPT_HEADER, 0);
    curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 );
    
    // 创建批处理cURL句柄
    $mh = curl_multi_init();
    
    // 增加2个句柄
    curl_multi_add_handle($mh,$ch1);
    curl_multi_add_handle($mh,$ch2);
    
    $running=null;
    // 执行批处理句柄
    do {
        //处理所有的请求,知道全部执行完毕
        curl_multi_exec($mh,$running);
    } while($running > 0);
    
    //根据句柄获取每个请求对应的返回的内容
    $a = curl_multi_getcontent($ch1);
    ee($a);
    ee(curl_error($ch1)); //单个请求出错,不会影响到其他请求
    
    $b = curl_multi_getcontent($ch2);
    ee($b);
    
    // 关闭全部句柄
    curl_multi_remove_handle($mh, $ch1);
    curl_multi_remove_handle($mh, $ch2);
    curl_multi_close($mh);

    curl_multi_info_read, 边读边取

    // 创建一对cURL资源
    $ch1 = curl_init();
    $ch2 = curl_init();
    
    // 设置URL和相应的选项
    curl_setopt($ch1, CURLOPT_URL, "http://test.cm/a.php/");
    curl_setopt($ch1, CURLOPT_HEADER, 0);
    curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
    
    curl_setopt($ch2, CURLOPT_URL, "http://test.cm/b.php");
    
    curl_setopt($ch2, CURLOPT_HEADER, 0);
    curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 );
    
    // 创建批处理cURL句柄
    $mh = curl_multi_init();
    
    // 增加2个句柄
    curl_multi_add_handle($mh,$ch1);
    curl_multi_add_handle($mh,$ch2);
    
    $running=null;
    $msgs_in_queue = null;
    // 执行批处理句柄
    do {
        //处理所有的请求,知道全部执行完毕 , 循环执行
        $status = curl_multi_exec($mh,$running);
         $info = curl_multi_info_read($mh, $msgs_in_queue);
        if (false !== $info)
         {
              eee($msgs_in_queue);
            eee($info); //如果不为空则说明有返回结果
            eee(curl_multi_getcontent($info['handle']));
        }
        
    } while($status === CURLM_CALL_MULTI_PERFORM  || $running > 0);
    
    // 关闭全部句柄
    curl_multi_remove_handle($mh, $ch1);
    curl_multi_remove_handle($mh, $ch2);
    curl_multi_close($mh);

    curl_multi_select,阻塞直到cURL批处理连接中有活动连接(todo ?)

    // 创建一对cURL资源
    $ch1 = curl_init();
    $ch2 = curl_init();
    
    // 设置URL和相应的选项
    curl_setopt($ch1, CURLOPT_URL, "http://test.cm/a.php/");
    curl_setopt($ch1, CURLOPT_HEADER, 0);
    curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
    
    curl_setopt($ch2, CURLOPT_URL, "http://test.cm/b.php");
    
    curl_setopt($ch2, CURLOPT_HEADER, 0);
    curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 );
    
    // 创建批处理cURL句柄
    $mh = curl_multi_init();
    
    // 增加2个句柄
    curl_multi_add_handle($mh,$ch1);
    curl_multi_add_handle($mh,$ch2);
    
    // 执行批处理句柄
    $running=null;
     do {
         curl_multi_exec($mh,$running);
         $ready=curl_multi_select($mh); // this will pause the loop
         if($ready>0){
             while($info=curl_multi_info_read($mh)){
                 $status=curl_getinfo($info['handle'],CURLINFO_HTTP_CODE);
                 if($status==200){
                     $successUrl=curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL);
                     echo($successUrl);
                     print_r(curl_multi_getcontent($info['handle']));
                 }
             }
         }
     } while ($running>0 && $ready!=-1);
     
    // 关闭全部句柄
    curl_multi_remove_handle($mh, $ch1);
    curl_multi_remove_handle($mh, $ch2);
    curl_multi_close($mh);
  • 相关阅读:
    javascript 版的 MD5
    一个通用的动态加载数据例子(IE5,NS6,Mozilla 1.3b)
    javascript 版的 MD4
    javascript 版的 sha1
    用dhtml做了一个密码管理器
    java版本的escape和unescape函数
    java版的MD5
    vue:app.vue中添加监听beforeunload事件,即当浏览器窗口关闭或刷新时删除vuex中的数据
    vue设置全局样式:loadOptions
    内网穿透frp
  • 原文地址:https://www.cnblogs.com/siqi/p/4419320.html
Copyright © 2011-2022 走看看