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 должен быть
но 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-адрес кажется действительным, может быть, проблема с вашим веб-сервером?