1

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

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

但是尽管我将 url 设置为已编码,但 QNetworkRequest 还是请求了这个(调试 url.toEncoded() 会正确打印“?”):

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

这会导致 404 not found 页面。我试过用 url.toString() 设置 url,只是 url,但是 '?' 一直在搞砸。我该怎么做才能正确请求链接?

我尝试在构造函数中构建 QUrl,如下所示:

QUrl url("https://"+host+port+connectionString);

但结果是下一个字符串:

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

4

3 回答 3

1

你可以试试QUrl::fromEncoded

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

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

正确处理字符。

于 2014-05-28T10:26:53.633 回答
0

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

于 2014-05-29T09:42:54.900 回答
0

您可以分别设置路径()和设置查询()。“?”之前是什么?是路径,之后是查询参数。

const QStringList path_part = path.split('?');
url.setPath(path_part.at(0));
if(path_part.size() > 1)
    url.setQuery(path_part.at(1));
于 2018-09-28T18:07:01.960 回答