zoukankan      html  css  js  c++  java
  • PHP扩展使用-CURL

    一、简介

      功能:是一个可以使用URL的语法模拟浏览器来传输数据的工具库,支持的协议http、https、ftp、gopher、telnet、dict、file、ldap

      资源类型:cURL 句柄和 cURL 批处理句柄

    二、使用

      1. 初始化curl句柄

      $ch = curl_init();

      2. curl句柄设置(默认GET方法)

      curl_setopt($ch,CURLOPT_URL,'http:xxxx')  设置访问的URL地址

      curl_setopt($ch,CURLOPT_HTTPHEADER,array)  设置http请求头, 值为数组形式array('Content-type: text/plain', 'Content-length: 100') 

      curl_setopt($ch,CURLOPT_HEADER,false)  设置不返回头信息,提高速度

      curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false) 访问https站点需要设置这2项 

      curl_setopt($ch,CURLOPT_SSL_VERIFYPEAR,false)

      curl_setopt($ch,CURLOPT_POST,ture)  以post方式请求

      curl_setopt($ch,CURLOPT_POSTFIELDS,$data)  post方式发送的数据,数组

      curl_setopt($ch,CURLOPT_RETURNTRANSFER,true)  true结果以字符串返回,false结果直接输出

      curl_setopt($ch,CURLOPT_FILE,$fp)  输出到文件,$fp为文件指针

      curl_setopt($ch,CURLOPT_AUTOREFERER,true)  被重定向时自动设置header中referer信息

      3. 执行curl句柄

      curl_exec($ch)  返回值true/false,也可设置返回字符串

      4. 关闭curl句柄

      curl_close($ch)

      5. 出错排查

      curl_getinfo()

      curl_error()

    三、样例

    <?php
    /*
    * $url URL路径
    * $method 传递参数的方法:get、post、put、delete
    * $params 参数
    * $auth 登录认证:账号和密码
    */
    function curl($url,$method,$params,$auth=null){
    //1、判断$url,$method,$params是否为空
    if(empty($url) || empty($method) || empty($params)){
    return '参数不能为空!';
    }
    //1、初始化CURL句柄
    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL, $url);//设置请求的URL
    #curl_setopt($curl, CURLOPT_HEADER, false);// 不要http header 加快效率
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); //设为TRUE把curl_exec()结果转化为字串,而不是直接输出

    //2、SSL验证
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求时要设置为false 不验证证书和hosts FALSE 禁止 cURL 验证对等证书(peer's certificate), 自cURL 7.10开始默认为 TRUE。从 cURL 7.10开始默认绑定安装。
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);//检查服务器SSL证书中是否存在一个公用名(common name)。

    //传送数据时,有的需要指定数据格式-下面是json格式,utf-8格式
    $header[] = "Content-Type:application/json;charset=utf-8";
    if(!empty($header)){
    curl_setopt ( $curl, CURLOPT_HTTPHEADER, $header );//设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100')
    }

    //3、请求时间
    $timeout = 30;
    curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout);//设置连接等待时间

    //4、不同请求方法的数据提交
    switch ($method){
    case "GET" :
    curl_setopt($curl, CURLOPT_HTTPGET, true);//TRUE 时会设置 HTTP 的 method 为 GET,由于默认是 GET,所以只有 method 被修改时才需要这个选项。
    break;
    case "POST":
    if(is_array($params)){
    $params = json_encode($params,320);
    }
    #curl_setopt($curl, CURLOPT_POST,true);//TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。
    #curl_setopt($curl, CURLOPT_NOBODY, true);//TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET。
    // curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");//HTTP 请求时,使用自定义的 Method 来代替"GET"或"HEAD"。对 "DELETE" 或者其他更隐蔽的 HTTP 请求有用。 有效值如 "GET","POST","CONNECT"等等;
    //设置提交的信息
    // curl_setopt($curl, CURLOPT_POSTFIELDS,$params);//全部数据使用HTTP协议中的 "POST" 操作来发送。
    //设置请求方式是post方式
    curl_setopt($curl,CURLOPT_POST,true);
    //设置post请求提交的表单信息
    curl_setopt($curl,CURLOPT_POSTFIELDS,$params);
    break;
    case "PUT" :
    curl_setopt ($curl, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($curl, CURLOPT_POSTFIELDS,json_encode($params,320));
    break;
    case "DELETE":
    curl_setopt ($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
    curl_setopt($curl, CURLOPT_POSTFIELDS,$params);
    break;
    default:
    echo '方法名不能为空!';
    break;
    }

    //5、传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"。
    if (!empty($auth) && isset($auth['username']) && isset($auth['password'])) {
    curl_setopt($curl, CURLOPT_USERPWD, "{$auth['username']}:{$auth['password']}");
    }

    //执行预定义的CURL
    $output = curl_exec($curl);
    //获取http返回值,最后一个收到的HTTP代码
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    if($output === FALSE ){
    echo "CURL Error:".curl_error($curl);
    }else{
    if($status === 200){
    //如果返回值是json格式,就需要转换格式
    // $output = json_decode($output,true);
    }else{
    $output = 'fail:请咨询管理员';
    }
    }
    //关闭cURL会话
    curl_close($curl);
    return $output;

    }
    $arr = array('name'=>'wangdi');
    var_dump(curl('http://127.0.0.1/test/get_data/get_data.php','POST',$arr));

  • 相关阅读:
    EF数据迁移完整步骤
    ajax跨域最全解决方案
    WPF控件与WPF窗体
    WPF模板是把控件MVC模式化
    对象与类型
    Java加权负载均衡策略
    db2列式存储
    linux离线安装mongodb及java调用
    python合并目录下excel数据
    python多线程迁移db2数仓9T数据
  • 原文地址:https://www.cnblogs.com/fanshehu/p/11936624.html
Copyright © 2011-2022 走看看