- N +

php獲取post數(shù)據(jù)?php接口用于獲取post數(shù)據(jù)

大家好,關于php獲取post數(shù)據(jù)很多朋友都還不太明白,今天小編就來為大家分享關于php接口用于獲取post數(shù)據(jù)的知識,希望對各位有所幫助!

如何使用php中的curl方法向服務器發(fā)送post請求

用PHP向服務器發(fā)送HTTP的POST請求,代碼如下:

<?php/***發(fā)送post請求*@paramstring$url請求地址*@paramarray$post_datapost鍵值對數(shù)據(jù)*@returnstring*/functionsend_post($url,$post_data){$postdata=http_build_query($post_data);$options=array('http'=>array('method'=>'POST','header'=>'Content-type:application/x-www-form-urlencoded','content'=>$postdata,'timeout'=>15*60//超時時間(單位:s)));$context=stream_context_create($options);$result=file_get_contents($url,false,$context);return$result;}

使用的時候直接調(diào)用上面定義的send_post方法:

$post_data=array('username'=>'username','password'=>'password');send_post('網(wǎng)址',$post_data);

php如何接收json數(shù)據(jù)

根據(jù)個人理解PHP接收json數(shù)據(jù)有三種:獲取json格式的請求參數(shù);獲取json文件中的數(shù)據(jù);獲取接口返回的寄送數(shù)據(jù)。下面將一一講述:1、獲取請求參數(shù)

$input=file_get_contents("php://input");

$input=json_decode($input,true);

var_dump($input);

2、獲取文件中的json

$jsonStr=file_get_contents('src/xx.json');

$jsonObj=json_decode($jsonStr,true);

3、獲取接口返回的json(以post請求為例)

functionrun_curl_json($url,$data,$timeout){

$data=json_encode($data);

$ch=curl_init($url);//請求的URL地址

curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST");

curl_setopt($ch,CURLOPT_POSTFIELDS,$data);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);

curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type:application/json','Content-Length:'.strlen($data)));

$ret=curl_exec($ch);

$httpCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);

curl_close($ch);

$jsonObj=json_decode($ret,true);

return['data'=>$jsonObj,'code'=>$httpCode];

}

以上三種方式中獲取到的都是json字符串,然后通過json_decode將json字符串轉(zhuǎn)為數(shù)組。

PHP使用curl函數(shù)發(fā)送Post請求的注意事項

對于一個初學者來說,接口可能覺得有些高大上,但是了解后其實比較簡單的。從簡單方面理解,你可以理解成get請求或者post請求,只不過是通過curl的模塊從PHP層模仿需要從前端提交的get或者post表單而已,本來get或者post的提交,常見的都是通過前端的form表單去提交,但是php寫接口,其實就是根據(jù)curl模塊區(qū)模擬而已。

另外如果是對接其他文檔的話,你需要仔細的閱讀文檔,因為寫接口的時候,接口需求以及處理加密方式對于閱讀能力差的人來說很不友好,比如需要加密token,那么這加密該如何加密?怎么加密?需要銜接上才可以。

舉例子:A平臺對接B平臺的接口,那么請求接口的時候,就得遵守B平臺梳理出來的接口規(guī)則,例如加密方式?請求方式?以及參數(shù)類型等等...

PHP用1個函數(shù)實現(xiàn)post請求,你用哪個

引言

前天的文章,我們說到了如何高效的下載網(wǎng)絡資源,對于小體積的文件。可以便捷的使用file_put_contents()進行請求。與之配對的函數(shù)file_get_contents()則是讀取資源。

今天我們討論一下,有沒有一種可能,使用一個函數(shù),就可以給服務器發(fā)送post請求的數(shù)據(jù)呢?

學習時間

上一段中我們已經(jīng)提示了,有一個函數(shù)可以用于讀取網(wǎng)絡資源,也就是間接的發(fā)起網(wǎng)絡請求。默認file_get_contents()是使用GET請求,如果是POST請求按道理也應該做的來。不過要怎么寫呢?

file_get_contents()函數(shù)是用來將文件的內(nèi)容讀入到一個字符串中的首選方法。如果操作系統(tǒng)支持還會使用內(nèi)存映射技術來增強性能。

其參數(shù)形式如下:

stringfile_get_contents(string$filename[,bool$use_include_path=false[,resource$context[,int$offset=-1[,int$maxlen]]]])

復雜的功能,我們需要組裝后面的參數(shù)即可。我們需要使用流操作的上下文context,傳入該函數(shù)。

首先構造請求的參數(shù),也就是鍵值對,這里需要使用&進行多參數(shù)連接:

$postdata=http_build_query(array('name'=>'joe','age'=>'13'));

接著構造請求結(jié)構體:

$opts=array('http'=>array('method'=>'POST','header'=>'Content-Type:application/x-www-form-urlencoded','content'=>$postdata));

最重要的一步,創(chuàng)建基于流的上下文,使用

$context=stream_context_create($opts);

寫到這里就“萬事俱備只欠東風”了。我們隆重地清楚主旨函數(shù)處理這些參數(shù):

$result=file_get_contents('http://example.com/submit.php',false,$context);

之后結(jié)果,或者錯誤內(nèi)容,就會輸出到$result對象。使用false判斷,或者使用已知的接口返回數(shù)據(jù)類型,進一步處理。

深度定制

上一節(jié)的內(nèi)容并沒有考慮網(wǎng)絡超時,接口授權,等等情形。本節(jié)我們說一個復雜度高一些的,要求處理一個https請求,并配置了basicauth的url,并使用post上傳數(shù)據(jù)。

首先還是裁剪請求體:

$opts=array('http'=>array('method'=>'POST','header'=>"Content-Type:text/xml\r\n.Authorization:Basic".base64_encode("$https_user:$https_password")."\r\n",'content'=>$body,'timeout'=>60));

注意我們在請求上添加了header,這是根據(jù)目標url的要求添加的。$body就是上一節(jié)中的$postdata結(jié)構類型。

接著創(chuàng)建流上下文:

$context=stream_context_create($opts);

最后調(diào)用函數(shù):

$url='https://'.$https_server;

$result=file_get_contents($url,false,$context,-1,40000);

寫在最后

通過上面兩個細節(jié)的函數(shù)處理,大家是不是對file_get_contents()有了更加深入的看法,原來這家伙還可以這么用,真是開了眼界!

Happycoding:_)

我是@程序員小助手,持續(xù)分享編程知識,歡迎關注。

php獲取不到post方式提交的數(shù)據(jù)

你把表單form的提交方法method從POST換成GET,你就能在URL清楚地看到每次提交的內(nèi)容了,這樣更方便新手理解.不過你也可以在瀏覽器提供的F12開發(fā)者工具的網(wǎng)絡里查看到請求的GET/POST/請求頭等信息.

PHP是HTML預處理器,瀏覽器首次加載test.php頁面,服務器PHP其實并沒有拿到用戶提交的數(shù)據(jù),也就是首次訪問生成的HTML頁面里的內(nèi)聯(lián)JS代碼里的alert()是沒有用戶數(shù)據(jù)的,在你提交表單后才有,所以會出現(xiàn)你說的"頁面JS總是獲取到前一次請求的值".

最后再說個安全性問題,你的代碼中,$_POST['one']是一個用戶輸出的數(shù)據(jù),在你把用戶輸入的數(shù)據(jù)輸出到頁面上時,需要注意防御XSS注入,防御方法如下:

如果你是把用戶輸入的數(shù)據(jù)輸出到

HTML上下文

中,應該這樣:

如果你是把用戶輸入的數(shù)據(jù)輸出到

JS上下文

<script></script>中,應該這樣:

不過個人還是建議分離JS跟PHP,也就是PHP不要直接輸出內(nèi)容賦值給JS,這樣JS代碼可以單獨放到一個JS文件里.

JS可以這樣拿到傳統(tǒng)表單提交里的數(shù)據(jù)并進行AJAX提交,以jQuery為例,將傳統(tǒng)form表單提交輕松改造為AJAX提交:

可見HTML傳統(tǒng)表單并不需要修改,JS代碼里也沒有混有PHP代碼,編程邏輯就清晰多了.

關于本次php獲取post數(shù)據(jù)和php接口用于獲取post數(shù)據(jù)的問題分享到這里就結(jié)束了,如果解決了您的問題,我們非常高興。

返回列表
上一篇:
下一篇: