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

QNetworkRequest URL containing '?' - not requesting properly because of QUrl encoding

本文关键字:请求 编码 包含 URL QNetworkRequest 由于 QUrl      更新时间:2023-10-16

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

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...*/
}

请求的url应该是

https://somewebpage.domain: 443/休息/login吗?方法= login_md5

但是QNetworkRequest请求这个,尽管我将url设置为编码(调试url. toencoded()打印'?"正确地):

https://somewebpage.domain: 443/REST/login % 3 fmethod = login_md5

这将导致404未找到页面。我试过用url. tostring()和url设置url,但是'?总是搞砸。我怎样才能正确地请求链接?

我试过在构造函数中像这样构建QUrl:

QUrl url (" https://" +主机+端口+ connectionString);

但是结果是下一个字符串:

https://somewebpage.xn--domain-efa/REST/login.php?方法= login_md5

你可以试试QUrl::fromEncoded

url。setUrl (QUrl:: fromPercentEncoding (url.toEncoded ())),

解析输入并返回相应的QUrl。输入假定为

编码的URL似乎有效,也许是您的web服务器有问题?

可以分别使用setPath()和setQuery()。"之前是什么?'为路径,after为查询参数。

const QStringList path_part = path.split('?');
url.setPath(path_part.at(0));
if(path_part.size() > 1)
    url.setQuery(path_part.at(1));