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

Unity调用PHP接口拉取纹理报Curl error 3:url malformed错误如何解决

问题根因

你遇到的Curl error 3: malformed报错本质是传入UnityWebRequest的图片URL格式不符合规范,curl无法正常解析,具体问题点如下:

  • PHP输出内容不符合预期:你当前PHP要么输出了带<a>标签的HTML内容而非纯URL,要么仅输出test3.jpg的相对路径,没有完整的域名前缀,无法被识别为合法的HTTP URL
  • 协程执行顺序错误:GetText和GetTexture都是异步协程,如果没有做顺序控制,GetTexture可能在GetText还没拿到接口返回的URL时就已经执行,此时eserurl为空或为默认值,导致URL非法
  • 没有做内容清洗:接口返回的文本可能携带多余的换行、空格、不可见字符,直接传入会导致URL格式错误
  • 所用UnityWebRequest API已过时:isNetworkError属性在新版Unity中已被弃用,可能存在判断逻辑异常
修复方案

1. 修复PHP输出逻辑

修改PHP代码,仅输出纯文本的完整图片URL,不要输出任何HTML标签、多余空白字符:

<?php
// 直接输出完整可访问的图片URL,不要添加其他任何内容
echo "https://akdenizsergi.com/yetki/uploads/test3.jpg";
?>

如果你需要动态输出不同的图片,也需要确保最终输出的是带http/https前缀的完整URL。

2. 修复C#逻辑

  • 调整协程执行顺序,确保拿到URL后再请求纹理
  • 增加URL清洗和合法性校验
  • 更新API判断逻辑适配新版Unity

修复后的代码示例:

// 先调用GetText,拿到URL后自动触发GetTexture
IEnumerator GetText()
{
    UnityWebRequest www = UnityWebRequest.Get("http://localhost/yetki/eserlistesi2.php");
    yield return www.SendWebRequest();

    if (www.result != UnityWebRequest.Result.Success)
    {
        Debug.Log("获取URL失败:" + www.error);
    }
    else
    {
        // 清洗URL:去除前后空白、换行、不可见字符
        eserurl = www.downloadHandler.text.Trim();
        // 校验URL合法性
        if (eserurl.StartsWith("http"))
        {
            // 确认URL有效后再调用获取纹理的协程
            StartCoroutine(GetTexture());
        }
        else
        {
            Debug.Log("返回的URL格式非法:" + eserurl);
        }
    }
}

IEnumerator GetTexture()
{
    UnityWebRequest www = UnityWebRequestTexture.GetTexture(eserurl);
    yield return www.SendWebRequest();

    if (www.result != UnityWebRequest.Result.Success)
    {
        Debug.Log("获取纹理失败:" + www.error);
    }
    else
    {
        myTexture = ((DownloadHandlerTexture)www.downloadHandler).texture;
        GetComponent<Renderer>().material = myMat;
        // 纹理赋值给材质
        myMat.mainTexture = myTexture;
        // 输出纹理尺寸
        print("Size is " + myTexture.width + " by " + myTexture.height);
        // 调整平面尺寸匹配纹理
        myPlane.transform.localScale += new Vector3(myTexture.width, 0, myTexture.height);
    }
}
验证步骤

修复后先打印eserurl的实际值,确认它是完整的、没有多余字符的图片链接,再访问该链接确认可以正常打开图片,即可解决报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:18:02