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

如何通过Curl/PHP获取气象站的HTTP POST数据流?

解决气象站POST数据获取问题的方法

1. 修正PHP CURL配置以获取响应体

默认情况下CURL会直接输出响应内容并返回状态值,要拿到响应体必须开启CURLOPT_RETURNTRANSFER选项。同时避免误设置只获取响应头的参数,修正后的示例代码:

$url = 'http://WeatherStation';
$ch = curl_init($url);

// 核心设置:让CURL返回响应体而非直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 若需要模拟气象站的POST请求(用于测试接收服务),可添加以下代码
// $postParams = ['PASSKEY' => 'your_passkey', 'tempinf' => 24.3];
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postParams));

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// 输出结果
if ($httpCode === 200) {
    echo $response;
} else {
    echo "请求失败,状态码:{$httpCode}";
}

2. 切换到“接收推送”的服务逻辑

气象站是主动向raspberrypi推送POST数据,因此你需要在raspberrypi上搭建一个接收POST的PHP服务,而非用Curl请求气象站地址。接收脚本示例(如weather_receiver.php):

// 读取气象站推送的原始POST数据
$rawPostData = file_get_contents('php://input');
// 若数据是表单格式,直接用$_POST解析;若是JSON则用json_decode
$parsedData = $_POST;
// $parsedData = json_decode($rawPostData, true);

// 保存数据到日志或数据库
file_put_contents('weather_records.log', date('Y-m-d H:i:s') . ' ' . $rawPostData . PHP_EOL, FILE_APPEND);
// 输出解析后的数据用于调试
print_r($parsedData);

之后配置raspberrypi的Web服务(Nginx/Apache),让气象站能访问该脚本的URL(如http://raspberrypi/weather_receiver.php),即可捕获推送的温湿度、雨量等数据。

3. 拆分响应头与响应体(若需同时获取)

如果必须同时拿到响应头和响应体,可开启CURLOPT_HEADER选项后手动拆分:

curl_setopt($ch, CURLOPT_HEADER, true);
$fullResponse = curl_exec($ch);
$headerLength = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$responseHeader = substr($fullResponse, 0, $headerLength);
$responseBody = substr($fullResponse, $headerLength);

echo "响应头:\n{$responseHeader}\n";
echo "响应体:\n{$responseBody}\n";

4. 验证气象站的推送目标地址

确认气象站的POST目标是raspberrypi上你的接收服务地址,而非你用Curl请求的http://WeatherStation——若该地址是气象站自身地址,它大概率不支持拉取数据,仅会主动向外推送。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:23:14