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: 443 / REST / login.php метод = login_md5

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

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

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

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

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

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

HTTPS: //somewebpage.xn--domain-efa/REST/login.php метод = login_md5

1

Решение

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

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

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

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

1

Другие решения

Закодированный 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));
0
По вопросам рекламы [email protected]