我有下一个提出请求的代码:
void HTTPClient::post(QString connectionString, QHttpMultiPart* _multiPart, bool returnProgress) {
QUrl url;
if (ssl)
url.setScheme("https");
else
url.setScheme("http");
url.setHost(host);
url.setPort(port);
url.setPath(connectionString);
url.setUrl(url.toEncoded());
QNetworkRequest request(url);
request.setRawHeader("User-Agent", QCoreApplication::applicationName().toLatin1());
/*...irrelevant code...*/
}
请求的网址应为
https://somewebpage.domain:443/REST/login.php?method=login_md5
但QNetworkRequest请求这个,尽管我将url设置为编码(调试url.toEncoded()正确打印'?'):
https://somewebpage.domain:443/REST/login.php%3Fmethod=login_md5
这会导致找不到404页面。我试过用url.toString()和url设置url,但是'?'不断弄乱。如何正确请求链接?
我尝试在构造函数中构建QUrl,如下所示:
QUrl url(“https://”+ host + port + connectionString);
但结果是下一个字符串:
https://somewebpage.xn--domain-efa/REST/login.php?method=login_md5
答案 0 :(得分:1)
您可以尝试QUrl::fromEncoded
url.setUrl(QUrl :: fromPercentEncoding(url.toEncoded()));
解析输入并返回相应的QUrl。假设输入 采用编码形式,仅包含ASCII字符。
正确处理字符。
答案 1 :(得分:0)
编码后的网址似乎有效,可能是您的网络服务器存在问题?
答案 2 :(得分:0)
您可以分别设置setPath()和setQuery()。 '之前是什么?是路径,之后是查询参数。
const QStringList path_part = path.split('?');
url.setPath(path_part.at(0));
if(path_part.size() > 1)
url.setQuery(path_part.at(1));