У меня есть следующий код, чтобы сделать запрос:
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
Ты можешь попробовать QUrl :: fromEncoded
url.setUrl (QUrl :: fromPercentEncoding (url.toEncoded ()));
Разбирает ввод и возвращает соответствующий QUrl. ввод предполагается
быть в кодированной форме, содержащей только символы ASCII.
правильно обрабатывать символы.
Закодированный URL-адрес кажется действительным, может быть, проблема с вашим веб-сервером?
Вы можете установить 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));