zoukankan      html  css  js  c++  java
  • curl模拟多线程

    1.curl发送请求的请求的基本思路

    1. 打开会话
    2. 设置会话参数
    3. 发送请求
    4. 关闭句柄

    2.curl单进程发送示例

    <?php
    //请求链接
    $arr = [
        'https://www.yahoo.com/',
        'http://www.jtthink.com/',
        'https://www.hao123.com/',
        'http://www.cnblogs.com/loveyouyou616/',
        'http://www.qq.com/',
        'http://www.sina.com.cn/',
        'http://www.163.com/',
        'https://www.yahoo.com/',
        'http://www.jtthink.com/',
        'https://www.hao123.com/',
        'http://www.cnblogs.com/loveyouyou616/',
        'http://www.qq.com/',
        'http://www.sina.com.cn/',
        'http://www.163.com/',
        'https://www.yahoo.com/',
        'http://www.jtthink.com/',
        'https://www.hao123.com/',
        'http://www.cnblogs.com/loveyouyou616/',
        'http://www.qq.com/',
        'http://www.sina.com.cn/',
        'http://www.163.com/'
    ];
    $headers = ['User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36',];
    foreach ($arr as $key => $url) {
        //打开curl会话
        $ch = curl_init($url);
        //设置会话参数
        //设置curl传输选项
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 20);
        //关闭https请求验证
        if (strpos($url,'https')){
            curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
            curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
        }
        //执行curl会话
        $res = curl_exec($ch);
        //关闭curl会话并释放资源
        curl_close($ch);
    }
    

    3.curl模拟多线程发送实例

    <?php
    //脚本开始的毫秒时刻
    $start = microtime(true);
    //链接数组
    $arr = [
      'https://www.yahoo.com/',
      'http://www.jtthink.com/',
      'https://www.hao123.com/',
      'http://www.cnblogs.com/loveyouyou616/',
      'http://www.qq.com/',
      'http://www.sina.com.cn/',
      'http://www.163.com/',
      'https://www.yahoo.com/',
      'http://www.jtthink.com/',
      'https://www.hao123.com/',
      'http://www.cnblogs.com/loveyouyou616/',
      'http://www.qq.com/',
      'http://www.sina.com.cn/',
      'http://www.163.com/',
      'https://www.yahoo.com/',
      'http://www.jtthink.com/',
      'https://www.hao123.com/',
      'http://www.cnblogs.com/loveyouyou616/',
      'http://www.qq.com/',
      'http://www.sina.com.cn/',
      'http://www.163.com/'
    ];
    $headers = ['User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36',];
    //打开一个curl批处理句柄
    $mh = curl_multi_init();
    foreach ($arr as $key => $url) {
      //初始化cURL会话
      $ch[$key] = curl_init($url);
      //设置curl传输选项
      curl_setopt($ch[$key],CURLOPT_RETURNTRANSFER,1);
      curl_setopt($ch[$key], CURLOPT_HTTPHEADER,$headers);
      curl_setopt($ch[$key], CURLOPT_HEADER, 0);
      curl_setopt($ch[$key], CURLOPT_TIMEOUT, 20);
      //关闭https请求验证
      if (strpos($url,'https')){
      curl_setopt ( $ch[$key], CURLOPT_SSL_VERIFYPEER, false );
      curl_setopt ( $ch[$key], CURLOPT_SSL_VERIFYHOST, 2 );
     }  //向批处理句柄中添加单独的curl句柄
      curl_multi_add_handle($mh, $ch[$key]);
    
    }
    $running = null;
    //执行批处理句柄
    do {
      curl_multi_exec($mh, $running);
    } while($running > 0);
    
    //获取内容
    foreach ($arr as $key => $url) {
      //返回获取的输出文本流
      $res[$key] = curl_multi_getcontent($ch[$key]);
      //关闭执行完的子句柄
      curl_close($ch[$key]);
    }
    $end = microtime(true) - $start;
    file_put_contents(__DIR__ . '/exec_time.log', $end . PHP_EOL, FILE_APPEND);
    echo $end;</pre>
    

    4.说明

    • 上面的模型也存在一个问题,返回的时间依赖最长的请求,通俗的说就是结果数据要等所有http请求结束后一起返回,然后逐个处理数据。
  • 相关阅读:
    TensorFlow_CNN_MNIST遇到的问题
    TensorFlow_CNN_MNIST问题
    TensorFlow_CNN内tf.nn.max_pool和tf.layers.max_pooling2d参数
    TensorFlow_CNN内tf.nn.conv2d和tf.layers.conv2d参数
    mysql 更新语句中加判断条件
    数据库 数据去重并取id最大的数据sql
    elasticsearch------java操作之QueryBuilders构建搜索Query
    Elasticsearch java api 基本搜索部分详解
    java 连接 elasticsearch 报错java.lang.NoClassDefFoundError: org/apache/http/auth/Credentials 解决
    java 获取文件内所有文件名
  • 原文地址:https://www.cnblogs.com/zhangjianqiang/p/10476301.html
Copyright © 2011-2022 走看看