包含'?'的QNetworkRequest网址 - 由于QUrl编码而未正确请求

问题描述 投票:1回答:3

我有下一个代码来发出请求:

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

c++ qt encoding qnetworkrequest
3个回答
1
投票

你可以尝试QUrl::fromEncoded

url.setUrl(QUrl :: fromPercentEncoding(url.toEncoded()));

解析输入并返回相应的QUrl。假设输入采用编码形式,仅包含ASCII字符。

正确处理字符。


0
投票

编码的URL似乎有效,可能是您的网络服务器有问题?


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));
© www.soinside.com 2019 - 2024. All rights reserved.