有時候我們獲取數據時需要根據Header中的格式來解析,比如上傳一個json而不是一個文本。這里用到了 php輸入|輸出流 的概念。
php://input
是個可以訪問請求的原始數據的只讀流。 POST 請求的情況下,最好使用 php://input
來代替 $HTTP_RAW_POST_DATA
,因為它不依賴于特定的 php.ini 指令。 而且,這樣的情況下 $HTTP_RAW_POST_DATA
默認沒有填充, 比激活 always_populate_raw_post_data 潛在需要更少的內存。
enctype="multipart/form-data"
的時候php://input
是無效的。
模擬代碼
// server.php
switch($_SERVER['CONTENT_TYPE']){
case 'application/json':
// 這里通過輸入端來獲取數據
$body = file_get_contents('php://input');
echo '這是一個json:', $body;
break;
// ...
}
// client_web.php, 注意這里使用了 axios
// ...
service = axios.create({
baseURL: 'mydomain',
validateStatus:function(status){
if(500 >= status) alert('server fails');
}
});
// 發一個請求
service.post(url, {
// ...
headers: {'Content-Type':'application/json'},
data:'{"code":100}'
// ...
});
// 全局設置也沒問題
service.interceptors.request.use(function(config){
// 這里設置請求頭
config.headers['Content-Type'] = 'application/json';
return config;
}, function(err){});