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

求助:QNetworkReply的HttpStatusCodeAttribute在WebAssembly下返回异常

解决WebAssembly环境下Qt获取HTTP状态码为0的问题
  • 先排查请求错误状态
    WebAssembly受浏览器跨域限制,即使WireShark显示通信正常,浏览器可能因CORS规则拦截响应,导致Qt无法正确解析状态码。先打印请求错误信息:

    if (rep->error() != QNetworkReply::NoError) {
        qDebug() << "Request error:" << rep->errorString();
    }
    

    若出现跨域相关错误,需要服务器配置Access-Control-Allow-Origin等CORS响应头。

  • 正确解析QVariant类型的状态码
    桌面端可能隐式转换QVariant到整型,但WebAssembly环境下需要显式转换:

    QVariant statusVar = rep->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    int statusCode = statusVar.isValid() ? statusVar.toInt() : -1;
    

    先判断属性是否有效,再转换为整型,避免无效值导致的0。

  • 直接调用浏览器原生API获取状态码
    Qt在WebAssembly下的网络请求基于浏览器Fetch API,可通过JS桥接直接读取原生响应的状态码:

    #ifdef __EMSCRIPTEN__
    // 确保在请求完成的槽函数中调用
    QJSEngine engine;
    QJSValue qtReply = engine.newQObject(rep);
    QJSValue nativeResponse = engine.evaluate("qtReply.nativeResponse");
    if (nativeResponse.isObject()) {
        int statusCode = nativeResponse.property("status").toInt();
        qDebug() << "Native status code:" << statusCode;
    }
    #endif
    
  • 升级Qt版本
    旧版本Qt(如5.15.0-5.15.9)的WebAssembly网络模块存在HttpStatusCodeAttribute解析bug,升级到5.15.10及以上版本,或Qt 6.x的稳定版,可修复此类兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:09:57