PHP中使用CURLOPT_POST调用POST接口无返回,请求排查问题
问题描述
我希望通过POST方法调用一个Web服务,需传递的字段如图所示:
我构造的请求数据为:
$post_fields = array('nombre' => 'uno', 'apellido' => 'dos');
对应的PHP代码如下:
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query( $post_fields ) ); $resp = curl_exec($curl); curl_close($curl); var_dump($resp);
但执行后未获取到任何返回信息,请问问题出在哪里,或服务端该如何接收数据?
问题排查与解决方案
客户端代码问题排查
- 未开启返回内容捕获:默认
curl_exec()会直接输出响应内容,不会将内容赋值给变量。必须添加curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);,这样$resp才能接收到服务端返回数据,否则var_dump($resp)只会输出bool(true)(请求成功)或bool(false)(请求失败)。 - 缺少错误排查逻辑:可以添加代码捕获curl请求错误,定位问题:
if(curl_errno($curl)){ echo 'Curl错误信息: ' . curl_error($curl); } - 请求格式不匹配:当前代码用
http_build_query()生成的是application/x-www-form-urlencoded格式数据,如果服务端要求JSON格式,需要调整请求头和数据:curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post_fields));
服务端接收方式
根据客户端传递的数据格式,服务端需对应处理:
application/x-www-form-urlencoded格式(当前客户端代码格式):// 直接通过$_POST全局数组获取参数 $nombre = $_POST['nombre']; $apellido = $_POST['apellido'];- JSON格式:
// 读取原始请求体并解析为数组 $postData = json_decode(file_get_contents('php://input'), true); $nombre = $postData['nombre']; $apellido = $postData['apellido']; multipart/form-data格式:// 同样通过$_POST获取普通字段,文件用$_FILES $nombre = $_POST['nombre']; $apellido = $_POST['apellido'];
内容的提问来源于stack exchange,提问作者SergioOrtiz
相关产品推荐
相关产品推荐

