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类引用,但没有一个可用的方法提供了想要的结果。
答案 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())传递时阻止编码,但如果您有复杂的查询字符串,则可能会丢失一些字符串完整性。
我没有亲自使用过这个,但我会发帖,因为你提到你在课堂参考中找不到任何东西。