URL QNetworkRequest, содержащий '?' - неправильный запрос из-за кодировки QUrl

У меня есть следующий код, чтобы сделать запрос:

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/REST/login.php?method=login_md5

но QNetworkRequest запрашивает это, несмотря на то, что я установил URL-адрес как закодированный (отладка url.toEncoded() печатает '?' правильно):

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

В результате страница 404 не найдена. Я попытался установить URL с помощью url.toString() и просто URL, но '?' продолжает портить. Что я могу сделать, чтобы запросить ссылку правильно?

Я попытался построить QUrl в конструкторе следующим образом:

QUrl url ("https: //" + хост + порт +connectionString);

Но в результате получается следующая строка:

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

3 ответа

Решение

Вы можете попробовать QUrl:: fromEncoded

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

Разбирает ввод и возвращает соответствующий QUrl. ввод предполагается в кодированном виде, содержащем только символы ASCII.

правильно обрабатывать символы.

Вы можете установить 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));

Закодированный URL-адрес кажется действительным, может быть, проблема с вашим веб-сервером?

Другие вопросы по тегам