您好,登錄后才能下訂單哦!
這篇文章主要介紹“php收不到參數如何解決”,在日常操作中,相信很多人在php收不到參數如何解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”php收不到參數如何解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
php收不到參數的解決辦法:1、修改發送端代碼為“$data = array ('openid' => "123",'keyword' => "321");$data = json_encode($data);...”;2、修改接收端代碼為“$obj=file_get_contents("php://input");$data=json_decode(...)”即可。
具體問題描述:
用thinkphp寫了一個接口。
在遠端用curl去調用接口,curl的寫法如下:
function curl($url,$method,$params,$auth){
//初始化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()結果轉化為字串,而不是直接輸出
//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)。
$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')
}
//請求時間
$timeout = 30;
curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout);//設置連接等待時間
//不同請求方法的數據提交
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" 操作來發送。
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;
}
$data = curl_exec($curl);//執行預定義的CURL
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);//獲取http返回值,最后一個收到的HTTP代碼
curl_close($curl);//關閉cURL會話
$res = json_decode($data,true);
return $res;
}
發現一個問題,就是post提交時,后臺無法接收到傳來的參數。
后臺接收:
public function getUserById(){
$custid = I("post.cust_uid");
$companyId = I("post.company_id");
$model = M('chatuser','snake_',$this->db);
$mine = $model->field('username,avatar,sign,id')->where(['id'=>$custid])->find();
$company = $model->field('username,avatar,sign,id')->where(['id'=>$companyId])->find();
$return['mine'] =$mine;
$return['company'] =$company;
$return['status'] = 1;
$this->ajaxReturn($return);
}
各種調試后,發現header中的
$header[] = "Content-Type:application/json;charset=utf-8";
和
if(is_array($params)){
$params = json_encode($params,320);
}
提交的是json型的數據,而用postman測試接口用body的form-data
正確解決方法的代碼如下:
//發送端
$data = array (
'openid' => "123",
'keyword' => "321"
);
$data = json_encode($data);
...
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//接受端
$obj = file_get_contents("php://input");
$data = json_decode($obj, true);
到此,關于“php收不到參數如何解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。