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

UnityWebRequest.Post请求报Curl error 1错误如何解决

问题成因

Curl error 1: Received HTTP/0.9 when not allowed报错的核心触发逻辑是:Unity底层使用libcurl库发起HTTP请求,libcurl 7.66.0及以上版本默认拒绝接收HTTP/0.9格式的响应,而你请求的接口返回内容不符合现代HTTP协议规范,被客户端直接拦截。

常见触发场景:

  • 后端接口没有返回标准HTTP格式响应:缺少HTTP/1.x 200 OK这类状态行、没有标准响应头,直接输出了纯文本内容
  • 端口映射/服务部署错误:48080端口实际运行的不是HTTP服务,是其他TCP协议服务,返回的是原始二进制/纯文本字节流,无法被HTTP解析器识别
  • 后端逻辑bug:在输出HTTP响应头之前提前打印了调试文本、报错信息,导致响应开头不符合HTTP格式要求
  • 小概率场景:客户端没有配置明文HTTP访问权限,请求被系统拦截后返回的异常内容被误识别为HTTP/0.9响应
解决方案

按排查优先级从高到低处理:

  • 优先修复后端服务问题(生产环境唯一推荐方案)
    先直接用命令行curl测试接口返回内容,执行命令:
    curl -v http://193.16.117.212:48080/login -d "username=test&password=test"
    
    查看返回结果的第一行是否为标准HTTP状态行,如果不是,直接修正后端逻辑:确保接口返回符合HTTP/1.1及以上版本的规范,包含正确的状态行、响应头,再输出响应体;同时确认48080端口确实对外提供HTTP服务,没有端口配置错误。
  • 测试环境临时绕过方案(禁止在生产环境使用)
    如果短时间无法调整后端,可以手动修改libcurl配置放开HTTP/0.9限制:
    1. 代码层面直接配置curl参数,修改后的请求代码如下:
    using System;
    using System.Collections;
    using System.Runtime.InteropServices;
    using UnityEngine;
    using UnityEngine.Networking;
    
    public class LoginTest : MonoBehaviour
    {
        [DllImport("libcurl")]
        private static extern int curl_easy_setopt(IntPtr curlHandle, int option, long value);
        // libcurl中HTTP0.9允许开关的配置ID
        private const int CURLOPT_HTTP09_ALLOWED = 288;
    
        IEnumerator Login(string userName, string password)
        {
            WWWForm form = new WWWForm();
            form.AddField("username", userName);
            form.AddField("password", password);
    
            using (UnityWebRequest webRequest = UnityWebRequest.Post("http://193.16.117.212:48080/login", form))
            {
                // 放开HTTP/0.9响应限制
                curl_easy_setopt(webRequest.GetNativeRequestHandle(), CURLOPT_HTTP09_ALLOWED, 1);
                yield return webRequest.SendWebRequest();
    
                if (webRequest.result != UnityWebRequest.Result.Success)
                {
                    Debug.LogError($"请求失败: {webRequest.error}");
                }
                else
                {
                    Debug.Log($"请求成功,返回内容: {webRequest.downloadHandler.text}");
                }
            }
        }
    }
    
    1. 部分Unity版本可直接在Player Settings的Scripting Define Symbols中添加CURLOPT_HTTP09_ALLOWED宏,全局放开该限制。
  • 明文权限配置检查
    • Android平台:在Player Settings中把Internet Access设置为Require,同时配置网络安全规则放开目标IP的明文HTTP访问权限
    • iOS平台:在Info.plist中配置NSAppTransportSecurity,要么开启全局任意加载,要么单独添加该IP的明文访问例外

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:12:43