C++ 向url添加动态变量
我想向url示例添加动态变量:C++ 向url添加动态变量,c++,qt,qt5,C++,Qt,Qt5,我想向url示例添加动态变量: QNetworkRequest req( QUrl( QString("http://website.com/?test=1&id=1") ) ); 但当我尝试这个: // the HTTP request varUrl = "http://website.com/?test="; varUrl += info; varUrl += "&id="; varUrl += info_2; QNetworkRequest req( QUrl( QSt
QNetworkRequest req( QUrl( QString("http://website.com/?test=1&id=1") ) );
但当我尝试这个:
// the HTTP request
varUrl = "http://website.com/?test=";
varUrl += info;
varUrl += "&id=";
varUrl += info_2;
QNetworkRequest req( QUrl( QString(varUrl) ) );
QNetworkReply *reply = mgr.get(req);
eventLoop.exec(); // blocks stack until "finished()" has been called
我得到这个错误:
您发布的错误消息部分是无关的。你的实际问题是:
QNetworkRequest req( QUrl( QString(varUrl) ) );
这被视为函数声明。这是C++中的一个角式案例,通常被称为“最令人烦恼的解析”。请参阅以获取解释
在任何情况下,都可以使用QUrl::fromUserInput()
静态函数,而不是直接传递查询字符串。这将正确地编码查询(否则您需要手动正确地编码查询)。因此,简而言之,将上面的行更改为:
QNetworkRequest req(QUrl::fromUserInput(varUrl));
这也解决了解析问题;上述内容被正确地视为变量定义,而不是函数声明,您的代码现在应该可以正常编译了
作为旁注,您可以使用QString::arg()
函数一次性构造字符串,而不必使用append(+=
)操作。因此,您可以这样构造URL字符串:
varUrl = QString("http://website.com/?test=%1&id=%2").arg(info).arg(info_2);
%1
将替换为info
的内容,而%2
将替换为info\u 2
的内容,具体如下:
QUrlQuery类提供了一种以成对方式操作键值的方法
URL的查询
它用于解析URL中的查询字符串,如
以下:
可能的解决方案是使用QUrlQuery
:
QString info = "1";
QString info_2 = "1";
QUrl url("http://website.com/");
QUrlQuery query;
query.addQueryItem("test", info);
query.addQueryItem("id", info_2);
url.setQuery(query);
这是一个更好的方法。编码这些东西可能是一件非常痛苦的事情。@tadman您也可以使用
QUrl::fromUserInput()
静态函数来正确编码输入。是的,这也是一个选项,但看到作者如何构建url的代码,我认为这是一个更好的选项。困扰解析的现代解决方案:QUrl{QString{varUrl}
。