PHP中Curl模擬POST發(fā)送JSON并接收J(rèn)SON
在本地模擬請(qǐng)求服務(wù)器數(shù)據(jù)時(shí),我們通常會(huì)使用Curl來進(jìn)行HTTP請(qǐng)求。當(dāng)請(qǐng)求和返回的數(shù)據(jù)格式為JSON時(shí),需要對(duì)數(shù)據(jù)進(jìn)行適當(dāng)?shù)木幋a和解碼以確保服務(wù)器和客戶端都能正確處理數(shù)據(jù)。客戶端Curl模擬提交代碼
在本地模擬請(qǐng)求服務(wù)器數(shù)據(jù)時(shí),我們通常會(huì)使用Curl來進(jìn)行HTTP請(qǐng)求。當(dāng)請(qǐng)求和返回的數(shù)據(jù)格式為JSON時(shí),需要對(duì)數(shù)據(jù)進(jìn)行適當(dāng)?shù)木幋a和解碼以確保服務(wù)器和客戶端都能正確處理數(shù)據(jù)。
客戶端Curl模擬提交代碼
可以通過以下函數(shù)來實(shí)現(xiàn)Curl模擬提交數(shù)據(jù):
```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數(shù)據(jù)
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);
}
```
該函數(shù)接收三個(gè)參數(shù):
- `$url`:服務(wù)器接收處理URL
- `$data`:數(shù)組形式的POST數(shù)據(jù)
- `$json`:是否以JSON方式提交(1:是,0:否)
服務(wù)器端獲取POST數(shù)據(jù)代碼
默認(rèn)情況下,PHP只能識(shí)別`application/x-www-form-urlencoded`標(biāo)準(zhǔn)的數(shù)據(jù)類型,因此需要對(duì)頭信息進(jìn)行適當(dāng)?shù)脑O(shè)置才能正確獲取POST數(shù)據(jù)。以下是兩種常見的獲取POST數(shù)據(jù)的方法:
第一種方法:
```php
$post $GLOBALS['HTTP_RAW_POST_DATA'];
```
第二種方法:
```php
$post file_get_contents("php://input");
```
使用以上方法可以獲取到正確的POST數(shù)據(jù)。
通過以上的代碼和方法,我們可以在PHP中使用Curl模擬POST發(fā)送JSON并接收J(rèn)SON數(shù)據(jù)。這在需要將多維數(shù)組數(shù)據(jù)同步至云端或提交至服務(wù)器的特殊需求場(chǎng)景下非常有用。