0

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;
}

此代码访问局域网控制器,使用 get 方法请求它的 json,同时在 url 中传递一个参数。我传递的网址得到百分比编码为:

“192.168.0.111/控制器?位置%7C03%7C100”

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

4

2 回答 2

2

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

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

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

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

因此,您需要一个完全原始的套接字连接(我没有经验)。

于 2014-11-11T07:58:35.547 回答
0

Qurl 具有解码功能。查看 QUrl::decode() 否则您可以在使用 QUrl::fromPercentEncoding(url.toEncoded()) 传递它时阻止编码,但如果您有复杂的查询字符串,您可能会失去一些字符串完整性。

我没有亲自使用过这个,但我虽然会像你提到的那样发布你在课堂参考中找不到任何东西。

于 2014-11-11T07:55:02.943 回答