方法一(若為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