php 7.4 发送 post 数据最常用、最可靠的方式是使用 curl;发表单数据需设 curlopt_post=true 并传数组,发 json 需 json_encode() 后传字符串并手动设置 content-type 头。

PHP 7.4 发送 POST 数据最常用、最可靠的方式是使用 curl,它原生支持、控制精细、兼容性好。file_get_contents 配 stream_context_create 也能用,但灵活性和错误处理弱一些;fsockopen 属于底层方式,日常开发极少直接使用。
推荐用 curl_init() 发送标准表单数据
这是对接登录页、传统表单接口的主流做法。关键点是:必须显式开启 POST 模式,数据自动编码,Content-Type 由 cURL 自动设置为 application/x-www-form-urlencoded:
-
初始化并设 URL:
$ch = curl_init('https://api.example.com/login'); -
强制启用 POST:
curl_setopt($ch, CURLOPT_POST, true);(漏掉这句,请求仍是 GET) -
传键值对数组:
curl_setopt($ch, CURLOPT_POSTFIELDS, ['username' => 'admin', 'password' => '123']);(cURL 自动调用http_build_query) -
确保返回响应体:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);(否则curl_exec返回true或false) -
加超时保护:
curl_setopt($ch, CURLOPT_TIMEOUT, 10);(避免脚本卡死) -
执行并收尾:
$response = curl_exec($ch); curl_close($ch);
发 JSON 数据要手动处理格式和头
调 REST API(如 Laravel、Spring Boot 接口)通常要求 Content-Type: application/json。不能直接传数组给 CURLOPT_POSTFIELDS,否则后端 $_POST 为空,php://input 也收不到有效 JSON:
- 先用
json_encode()把数据转成字符串:$json_data = json_encode(['id' => 123, 'status' => 'active']); - 设请求体:
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); - 显式加请求头:
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); - 注意:此时不能再传数组给
CURLOPT_POSTFIELDS,否则 cURL 会按 multipart 发送,后端无法解析
用 file_get_contents 也能发,但限制多
适合简单场景,比如没开 cURL 扩展的受限环境。它依赖 allow_url_fopen = On,且不支持重定向跟随、复杂 header 组合等:
- 构造数据:
$data_string = http_build_query(['user' => 'a', 'pass' => 'b']); - 配置上下文:
$context = stream_context_create(['http' => ['method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'content' => $data_string, 'timeout' => 10]]); - 发起请求:
$response = file_get_contents($url, false, $context); - 务必检查返回值是否为
false,代表失败
别踩这些常见坑
很多“发不出去”或“收不到数据”的问题,其实就出在几个细节上:
-
CURLOPT_POST必须设为true,不是靠传了数据就自动切换方法 - 传数组给
CURLOPT_POSTFIELDS是表单模式;传字符串是原始体模式——二者不可混用 - 发 JSON 时,
Content-Type头必须手动加,且不能省略 - 调试阶段可加
curl_setopt($ch, CURLOPT_HEADER, true)查看真实请求头;上线前关掉 - 生产环境禁用
CURLOPT_SSL_VERIFYPEER => false,改用系统 CA 证书
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











