QT: QUrl без процентного кодирования

QT: Мне было интересно, есть ли способ создать объект QUrl или другой объект класса URL из строки без кодирования окончательного URL. Например, вот фрагмент моего кода:

QString GetJsonStringFromURL(QString url) //url == "192.168.0.111/controller?POSITION|03|100"{
QEventLoop eventLoop;
QNetworkAccessManager mgr;
QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));

QNetworkRequest req( QUrl::fromUserInput(url) ) ;

QNetworkReply *reply = mgr.get(req);
eventLoop.exec(); //wait till reply finished
QString strReply = reply->readAll();
return strReply;
}

Этот код обращается к контроллеру локальной сети, запрашивая его json с помощью метода get, при передаче параметра в URL. URL, который я передаю, кодируется в процентах:

«192.168.0.111/controller?POSITION%7C03%7C100»

чего я пытаюсь избежать. Сервер, к которому я пытаюсь получить доступ, представляет собой нестандартную часть аппаратного обеспечения с микропрограммой, написанной на C, которая не включает в себя процентное декодирование. Я хотел бы избежать обслуживания на стороне сервера. Я попытался просмотреть ссылку на класс QUrl, но ни один из доступных методов не дал желаемого результата.

0

Решение

Это невозможно с QNetworkRequest поскольку для каждого запроса требуется объект QUrl, который хранит место назначения и внутренне преобразуется в закодированную строку.

setRawHeader не работает для вас, так как он может установить все заголовки HTTP, кроме как из URL, который является частью запроса GET.

Подтвердите формат необработанного HTTP-заголовка curl -v http://stackoverflow.com/questions/

GET /questions/ HTTP/1.1
User-Agent: curl/7.37.1
Host: stackoverflow.com
Accept: */*

Таким образом, вам нужен полностью сырой розетка (с которым у меня нет опыта).

2

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

Qurl имеет функцию декодирования. Посмотрите на QUrl :: decode (), иначе вы можете предотвратить кодирование при передаче его с помощью QUrl :: fromPercentEncoding (url.toEncoded ()), но вы можете потерять некоторую целостность строк, если у вас есть сложные строки запроса.

Я лично не использовал это, но я хотел бы опубликовать, как вы упомянули, вы не могли найти что-либо в справочнике класса.

0

По вопросам рекламы [email protected]