使用PHP的CURL向另一PHP页面POST数据并获取响应时遇错求助
问题分析与解决方案
咱们先拆解下你遇到的问题:
1. 错误判断逻辑搞反了
你的错误提示里状态码是200——这可是HTTP请求成功的标准状态码,但你的代码里写了if ($status != 201)就抛出错误,直接把正常的成功请求当成了失败。201通常是“资源创建成功”的状态,而大部分接口成功会返回200,这是第一个坑。
2. 接收页面的输出格式错误
接收页面里echo json_decode($userArray, true);这行有问题:直接echo数组的话,PHP会把它转换成字符串Array,而不是你需要的JSON格式。这就导致发送端拿到的响应不是有效的JSON,json_decode之后无法解析出正确的结构,最后echo的时候又输出Array,形成了恶性循环。
3. 发送端的响应输出不规范
发送端最后echo $response;直接输出数组,同样会显示Array,没法看到实际的响应内容。
具体修改步骤
第一步:修正发送端的状态判断逻辑
把判断条件改成检查是否为成功状态码(200-299范围),兼容更多正常情况:
// 替换原来的if判断 if ($status < 200 || $status >= 300) { die("Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl)); }
第二步:修复接收页面的输出
接收页面需要把处理后的数组重新编码成JSON输出,同时设置正确的响应头:
<?php // 读取原始POST数据 $rawData = trim(file_get_contents("php://input")); // 解码为数组 $userArray = json_decode($rawData, true); // 这里可以添加参数验证、业务逻辑处理等操作 // 设置正确的响应头,输出JSON格式 header('Content-Type: application/json'); echo json_encode($userArray); ?>
第三步:优化发送端的响应输出
把直接echo数组改成格式化输出,方便查看结果:
// 替换原来的echo $response; // 方式1:输出格式化的JSON echo json_encode($response, JSON_PRETTY_PRINT); // 方式2:打印数组结构(适合调试) echo '<pre>'; print_r($response); echo '</pre>';
额外调试小技巧
- 发送端可以添加
var_dump($content);,确认发送的JSON格式是否正确。 - 接收端可以添加日志记录,验证是否收到了正确的数据:
file_put_contents('debug.log', $rawData . PHP_EOL, FILE_APPEND);
内容的提问来源于stack exchange,提问作者Daniel Robinson
相关产品推荐
相关产品推荐

