QT:没有百分比编码的QUrl

时间:2014-11-11 07:31:10

标签: c++ qt get qurl

QT:我想知道是否有办法从字符串创建QUrl或其他URL类对象而不编码最终的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/controller?POSITION%7C03%7C100”

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

2 个答案:

答案 0 :(得分: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: */*

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

答案 1 :(得分:0)

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

我没有亲自使用过这个,但我会发帖,因为你提到你在课堂参考中找不到任何东西。