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

UnityWebRequest调用无SSL证书网站PHP接口出现空响应(Curl错误52)的解决方法求助

解决Unity请求PHP脚本返回空回复的问题

首先,咱们来拆解你遇到的Curl error 52: Empty reply from server错误——这个错误本质是服务器没有返回任何有效内容,大概率是你的PHP脚本执行出了问题,而Unity这边的URL拼接方式也帮倒忙了。下面是一步步的解决方案:

1. 修复Unity的URL拼接错误

你现在的代码里给uname参数手动加了单引号:

string url = "http://example.com/getUser.php?uname=" + "'" + usernameInputField.text + "'";

这会导致传递给PHP的参数是带单引号的(比如用户输入admin,实际传递的是'admin'),而你的PHP代码又会把这个带引号的值直接拼到SQL语句里,最终SQL会变成:

SELECT id, password FROM users WHERE username = ''admin''

这明显是语法错误,PHP执行这个SQL时会失败,自然不会返回任何数据,服务器就给Unity发了空回复。

修复后的Unity代码:去掉多余的单引号,同时用UnityWebRequest.EscapeURL处理用户名,避免特殊字符(比如空格、&、%)破坏URL结构:

IEnumerator GetText() {
    string encodedUsername = UnityWebRequest.EscapeURL(usernameInputField.text);
    string url = $"http://example.com/getUser.php?uname={encodedUsername}";
    using(UnityWebRequest www = UnityWebRequest.Get(url)) {
        yield return www.SendWebRequest();
        if(www.result != UnityWebRequest.Result.Success) {
            Debug.Log(www.error);
        } else {
            response = www.downloadHandler.text;
            Debug.Log("Received response: " + response); // 加个日志确认返回内容
        }
    }
}

2. 修复PHP脚本的SQL注入问题(同时解决执行错误)

你当前的PHP代码直接拼接用户输入到SQL里,不仅会导致刚才的语法错误,还存在致命的SQL注入风险——攻击者可以通过构造特殊用户名直接窃取整个用户表的数据,甚至删除数据库。

修复后的PHP代码:使用mysqli预处理语句,安全地处理用户输入,同时添加错误处理,方便排查问题:

<?php
// 先确保数据库连接正确(这里假设你已经有$connect的初始化代码)
if (!$connect) {
    die(json_encode(["error" => "Database connection failed: " . mysqli_connect_error()]));
}

// 使用预处理语句
$username = $_GET['uname'] ?? ''; // 处理参数不存在的情况
if (empty($username)) {
    die(json_encode(["error" => "Username parameter is missing"]));
}

// 准备SQL模板
$query = "SELECT id, password FROM users WHERE username = ?";
$stmt = mysqli_prepare($connect, $query);
// 绑定参数(s表示字符串类型)
mysqli_stmt_bind_param($stmt, "s", $username);
// 执行查询
mysqli_stmt_execute($stmt);
// 获取结果
$result = mysqli_stmt_get_result($stmt);

$records = [];
while ($record = mysqli_fetch_assoc($result)) {
    $records[] = $record;
}

// 返回JSON格式的结果(即使没有数据也返回空数组,避免空回复)
echo json_encode($records);

// 关闭资源
mysqli_stmt_close($stmt);
mysqli_close($connect);
?>

这里做了几个关键改进:

  • 用预处理语句代替直接拼接,彻底避免SQL注入
  • 添加了参数缺失、数据库连接失败的错误处理,会返回明确的错误JSON,而不是空内容
  • 将所有结果放到数组里再输出JSON,保证即使没有匹配用户,也会返回[]而不是空,Unity就能收到有效回复

3. 排查服务器端的其他可能问题

如果上面两步修复后还是有问题,你可以:

  • 直接在浏览器里访问构造好的URL(比如http://example.com/getUser.php?uname=test),看看浏览器里返回的内容是什么——如果显示PHP错误,说明脚本还有问题,根据错误提示修复
  • 查看服务器的PHP错误日志(通常在服务器的/var/log/apache2/或/var/log/nginx/目录下,或者PHP的error_log配置指定的路径),看看脚本执行时有没有报错
  • 确保服务器的PHP版本支持mysqli扩展,并且数据库连接信息(主机、用户名、密码、数据库名)都是正确的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:37:45