You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP CURL日志存储与POST数据转发故障排查及解决方案

问题分析与解决方案

核心问题

  • 请求格式不兼容:服务器1通过CURL发送的是application/json格式POST数据,但服务器2依赖$_REQUEST获取数据——$_REQUEST仅自动解析application/x-www-form-urlencoded或multipart/form-data类型的请求体,无法直接读取JSON格式的请求内容。
  • 字段名称不匹配:服务器1提交的字段名是field1/field2/field3,但服务器2中尝试获取的是field_1/field_2/field_3,两者完全不一致。

服务器2代码修改方案

修改服务器2代码,使其正确读取JSON请求体并修正字段名匹配问题:

<?php
// 读取JSON格式的原始请求体
$rawInput = file_get_contents('php://input');
$requestData = json_decode($rawInput, true) ?: [];

// 匹配服务器1的字段名,无需重复urlencode(JSON解析后会自动处理编码)
$field_1 = $requestData['field1'] ?? '';
$field_2 = $requestData['field2'] ?? '';
$field_3 = $requestData['field3'] ?? '';

// Config
$apikey     = 'bla-bla';
$url        = "https://api.some.url.dot.com/script";

// 准备转发给服务器3的数据
$postdata = array(
    "field_1" => $field_1,
    "field_2" => $field_2,
    "field_3" => $field_3
);

// 转发请求到服务器3
$data_string = json_encode($postdata);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'api-key:'.$apikey,
    'Content-Type:application/json'
));
$output = curl_exec($ch);

// 写入日志
$log = $field_1.' '.$field_2.' '.$field_3;
file_put_contents('/path/to/log',$log.PHP_EOL , FILE_APPEND | LOCK_EX);

// 可选:返回响应便于调试
echo $output;
die();
?>

额外优化建议

  • 服务器1的CURL代码中,$_POST[field1]存在语法错误,应改为$_POST['field1'](添加引号,避免PHP将其解析为常量)。
  • 服务器1无需对字段值做urlencode,JSON会自动处理字符串转义,重复编码会导致服务器2解析后出现多余编码字符。修改后服务器1的$args可简化为:
$args = array(
    'field1' => $_POST['field1'],
    'field2' => $_POST['field2'],
    'field3' => $_POST['field3'],
);

内容的提问来源于stack exchange,提问作者lion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:21:35