通過 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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM