PHP中Curl模擬POST發(fā)送JSON并接收JSON
在本地模擬請求服務器數據時,我們通常會使用Curl來進行HTTP請求。當請求和返回的數據格式為JSON時,需要對數據進行適當的編碼和解碼以確保服務器和客戶端都能正確處理數據。客戶端Curl模擬提交代碼
在本地模擬請求服務器數據時,我們通常會使用Curl來進行HTTP請求。當請求和返回的數據格式為JSON時,需要對數據進行適當的編碼和解碼以確保服務器和客戶端都能正確處理數據。
客戶端Curl模擬提交代碼
可以通過以下函數來實現Curl模擬提交數據:
```php
function http($url, $data NULL, $json false){
$curl curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
if (!empty($data)) {
if($json is_array($data)){
$data json_encode( $data );
}
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
if($json){ //發(fā)送JSON數據
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array(
'Content-Type: application/json; charsetutf-8',
'Content-Length:'. strlen($data)
)
);
}
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$res curl_exec($curl);
$errorno curl_errno($curl);
if ($errorno) {
return array('errorno' > false, 'errmsg' > $errorno);
}
curl_close($curl);
return json_decode($res, true);
}
```
該函數接收三個參數:
- `$url`:服務器接收處理URL
- `$data`:數組形式的POST數據
- `$json`:是否以JSON方式提交(1:是,0:否)
服務器端獲取POST數據代碼
默認情況下,PHP只能識別`application/x-www-form-urlencoded`標準的數據類型,因此需要對頭信息進行適當的設置才能正確獲取POST數據。以下是兩種常見的獲取POST數據的方法:
第一種方法:
```php
$post $GLOBALS['HTTP_RAW_POST_DATA'];
```
第二種方法:
```php
$post file_get_contents("php://input");
```
使用以上方法可以獲取到正確的POST數據。
通過以上的代碼和方法,我們可以在PHP中使用Curl模擬POST發(fā)送JSON并接收JSON數據。這在需要將多維數組數據同步至云端或提交至服務器的特殊需求場景下非常有用。