• 通过 curl 传递数据


    方法一(若为post方式,只适用于一维数组

        /**
         * curl发送htpp请求
         * 可以发送https,http,get方式,post方式,post数据发送
         */
        public function dataRequest($url,$https=false,$method='get',$data=null)
        {
            //初始化curl
            $ch = curl_init($url);
            //字符串不直接输出,进行一个变量的存储
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            //https请求
            if ($https === true) {
                //确保https请求能够请求成功
                curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
                curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
            }
            //post请求
            if ($method == 'post') {
                curl_setopt($ch,CURLOPT_POST,true);
                curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
            }
            //发送请求
            $str = curl_exec($ch);
            $aStatus = curl_getinfo($ch);
            //关闭连接
            curl_close($ch);
            if(intval($aStatus["http_code"])==200){
                return json_decode($str);
            }else{
                return false;
            }
        }

    方法二(若为post方式,适用于二维数组

    /**
     * @Purpose      :  curl发送htpp请求,可以发送https,http,get方式,post方式,post数据发送
     * @Author       :  Chrdai
     * @Method Name  :  SendDataByCurl()
     * @parameter    :  string  $url     传送的 url
     *                  boolean $https   是否使用 https
     *                  string  $method  传递方法
     *                  array   $data    数据
     * @return       :  成功返回对方返回的结果,是非返回 false
     */
    function SendDataByCurl($url,$https=false,$method='get',$data=null)
    {
        // 初始化curl
        $ch = curl_init($url);
        //curl_exec()获取的信息以字符串返回,而不是直接输出。
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        // https请求
        if ($https === true) {
            // 确保https请求能够请求成功
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        }
        // post请求
        if ($method == 'post') {
         // TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。 curl_setopt(
    $ch,CURLOPT_POST,true); // 所需传的数组用http_bulid_query()函数处理一下,就可以传递二维数组了 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); } // 发送请求 $str = curl_exec($ch); $aStatus = curl_getinfo($ch); // 关闭连接 curl_close($ch); if(intval($aStatus["http_code"])==200){ return json_decode($str); }else{ return false; } }

    方法三(若为post方式,适用于传递 json

    /**
     * @Purpose      :  curl发送htpp请求,可以发送https,http,get方式,post方式,post数据发送
     * @Author       :  Chrdai
     * @Method Name  :  SendDataByCurl()
     * @parameter    :  string  $url     传送的 url
     *                  boolean $https   是否使用 https
     *                  string  $method  传递方法
     *                  array   $jsonStr 需要传递的 json 字符串
     * @return       :  成功返回对方返回的结果,是非返回 false
     */
    function SendDataByCurl($url,$https=false,$method='get',$jsonStr=null)
    {
        // 初始化curl
        $ch = curl_init($url);
        // 字符串不直接输出,进行一个变量的存储
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        // https请求
        if ($https === true) {
            // 确保https请求能够请求成功
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        }
        // post请求
        if ($method == 'post') {
            curl_setopt($ch,CURLOPT_POST,true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
            // 只需要用个 http 头就能传递 json 啦!
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                    'Content-Type: application/json; charset=utf-8',
                    'Content-Length: ' . strlen($jsonStr)
                )
            );
        }
        // 发送请求
        $str = curl_exec($ch);
        $aStatus = curl_getinfo($ch);
        // 关闭连接
        curl_close($ch);
        if(intval($aStatus["http_code"])==200){
            return json_decode($str);
        }else{
            return false;
        }
    }

    方法四:工作中实际使用过,如果上面的都不能成功推送,则可以使用下面这个:

    /**
     * curl post方法
     * @param string $url url链接
     * @param string $postfields 要传送的参数
     * @param string $path 写日志的路径
     * @return 返回的结果
     */
    function SendDataByCurl($url,$data){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_POST, true);
        $header[] = 'Content-type:application/x-www-form-urlencoded';
        curl_setopt($curl, CURLOPT_HTTPHEADER,$header);    
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HEADER, true);
        $result = curl_exec($curl);
        curl_close($curl);
        return $result;
    }

     方法五、需要设置 header 的时候用这个:

    /**
     * POST方式请求
     * @param $url url
     * @param array $params params
     * @param int $timeout timeout
     * @return mixed return responce
     */
    function curl_post($url,$params = array(),$header = array(),$timeout=30){
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        if(!empty($header)){
            curl_setopt($ch, CURLOPT_HTTPHEADER  , $header);
        }
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,is_array($params) ? http_build_query($params) : $params);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        $str = curl_exec($ch);
        curl_close($ch);
        return $str;
    }

    方法一和方法二可以在 全局表里 $_REQUEST 或者 $_POST 中获取到

    方法三可以使用    $params = file_get_contents("php://input");  来获取。

     CURL 在php官网的网址:http://www.php.net/manual/en/function.curl-setopt.php

    php给java推送 json 格式的数据的时候,假如对方接收的参数叫 rec ,数据是一个叫 data 的的数组,需要这样转换一下,对方才能成功接收到:

    $params = json_encode($data);
    $postData = "rec=[".$params.']';

    本文为 小作者工作中的总结,如有转载请注明出处:http://www.cnblogs.com/chrdai/p/6090188.html

     

     

  • 相关阅读:
    微信 播放视频
    json与页面动态绑定
    layer mobile开发layer.full
    Layer 使用
    分享一段,图片加水印的代码。本人修改过多次
    jenkins .net linux
    Jenkins .net windows
    《微服务-架构与实践》
    分布式网站架构
    Go 并发随机打印1-n
  • 原文地址:https://www.cnblogs.com/chrdai/p/6090188.html
Copyright © 2020-2023  润新知