QT:QUrl,无百分比编码

QT: QUrl with no percent encoding

本文关键字:百分比 编码 QUrl QT      更新时间:2023-10-16

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中传递一个参数。我传递的url得到百分比编码到:

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

这是我试图避免的。我试图访问的服务器是一个自定义的硬件,固件用C编写,不包含百分比解码。我希望避免在服务器端进行维护。我试过浏览QUrl类引用,但没有一个可用的方法提供所需的结果。

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

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

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

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

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

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

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