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

时间:2014-05-28 08:51:26

标签: c++ qt encoding qnetworkrequest

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

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

3 个答案:

答案 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));