PHP调用ETS2遥测服务器API GET请求遇连接判断问题求助
ETS2遥测API PHP连接问题
我玩ETS2时用Truckers MP的API一切正常,但想用ETS2遥测服务器API获取游戏运行时的遥测数据展示到个人网站。现在用的PHP代码运行后一直显示“未连接”,附上代码。我正在学习API和Java相关知识,已经试过不同写法、参考示例和谷歌搜索,问题还是没解决。
代码如下:
$json = file_get_contents('http://iltelemetry.inet-developments.org:25555/api/ets2/telemetry'); $data = json_decode($json); foreach($data->game as $conn){ } $conn = $game->connected; if ($conn == 'true'){ echo 'Connected to telemetry'; } else{ echo 'Not Connected to telemetry'; } $conn = $data->response->connected; $game = $data->response->gameName; echo'<li id="fleet" >'; echo '<center>Connected: '. $conn . '<p></center>'; echo '<center>Game Name: '. $game . '<p></center>'; echo'</li>';
问题排查与修复建议
1. 先明确API返回的JSON结构
直接在浏览器访问http://iltelemetry.inet-developments.org:25555/api/ets2/telemetry,查看返回的字段层级。你代码里一会儿用$data->game,一会儿用$data->response,明显是对API返回结构不清晰,这是核心问题之一。
2. 代码里的明显错误
- 空循环
foreach($data->game as $conn){}完全没用,而且$game变量从未定义,后面$conn = $game->connected;必然触发错误,这也是一直显示“未连接”的直接原因。 file_get_contents可能因PHP配置(如allow_url_fopen关闭)、网络或API限制失败,没有错误处理的话根本不知道问题出在请求环节还是解析环节。
修复后的示例代码
// 先处理API请求的错误情况 $json = file_get_contents('http://iltelemetry.inet-developments.org:25555/api/ets2/telemetry'); if ($json === false) { echo '无法连接到遥测API'; exit; } // 解析JSON并判断是否成功 $data = json_decode($json); if ($data === null) { echo 'API返回数据格式错误'; exit; } // 先打印完整数据,确认字段结构(调试用,上线可删除) // print_r($data); // 安全获取字段,避免未定义报错 $isConnected = isset($data->response->connected) ? $data->response->connected : false; $gameName = isset($data->response->gameName) ? $data->response->gameName : '未知'; // 连接状态判断 echo $isConnected ? '已连接到遥测' : '未连接到遥测'; // 输出页面内容 echo '<li id="fleet">'; echo '<center>Connected: '. ($isConnected ? 'true' : 'false') . '</p></center>'; echo '<center>Game Name: '. $gameName . '</p></center>'; echo '</li>';
额外优化建议
如果file_get_contents请求失败,换成cURL兼容性更好:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://iltelemetry.inet-developments.org:25555/api/ets2/telemetry'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $json = curl_exec($ch); curl_close($ch); // 后续解析逻辑和上面一致
内容的提问来源于stack exchange,提问作者Chris Lea
相关产品推荐
相关产品推荐

