c++ - QT:没有百分比编码的 QUrl

标签 c++ qt get qurl

QT:我想知道是否有一种方法可以在不对最终 URL 进行编码的情况下从字符串创建 QUrl 或另一个 URL 类对象。例如,这是我的代码片段:

QString GetJsonStringFromURL(QString url) //url == "192.168.0.111/controller?POSITION|03|100"
{
    QEventLoop eventLoop;
    QNetworkAccessManager mgr;
    QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));  

    QNetworkRequest req( QUrl::fromUserInput(url) ) ; 

    QNetworkReply *reply = mgr.get(req);
    eventLoop.exec(); //wait till reply finished
    QString strReply = reply->readAll();
    return strReply;
}

此代码访问局域网 Controller ,使用 get 方法请求它的 json,同时在 url 中传递参数。我传递的 url 将百分比编码为:

“192.168.0.111/ Controller ?POSITION%7C03%7C100”

我正在努力避免。我试图访问的服务器是一个定制的硬件,固件是用 C 编写的,不包含百分比解码。我想避免在服务器端进行维护。我已经尝试通过 QUrl 类引用,但没有可用的方法提供想要的结果。

最佳答案

这对于 QNetworkRequest 是不可能的,因为每个请求都需要一个 QUrl 对象,该对象存储目的地并在内部转换为编码字符串。

setRawHeader对您不起作用,因为它可以设置除 URL 之外的所有 HTTP header ,这是 GET 请求的一部分。

确认原始 HTTP header 格式 curl -v http://stackoverflow.com/questions/

GET /questions/ HTTP/1.1
User-Agent: curl/7.37.1
Host: stackoverflow.com
Accept: */*

因此你需要一个完全原始的 socket connection (我没有这方面的经验)。

关于c++ - QT:没有百分比编码的 QUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26859757/

相关文章:

get - 在 Rust HashMap 中返回精确值

Node.js HTTP GET 请求内容类型

c++ - 如何在 C++ 中返回文件名?

c++ - 我怎样才能为一个概念重载一个函数?

c++ - 'Attempting to upgrade input file specified using deprecated transformation parameters' 是什么意思?

qt - 使用 Qt 显示灰度图像

c++ - 如何使继承层次结构中的成员函数始终返回相同的值?

QtCreator Build 不会更新设计表单中的 UI 更改

android - 如何使用 Qt 将文件写入 Android 设备?

javascript - 为什么我无法使用 jQuery 和 JavaScript 获取标签的值?