Http POST, выбирая страницу используя Qt

я пытаюсь пройти аутентификацию на онлайн-сервере, но я не могу выбрать страницу, которую хочу скачать, вот мой код:

Запрос на получение:

QObject::connect(&access, SIGNAL(finished(QNetworkReply*)), &loop_get, SLOT(quit()));

url_str = QString("http://") + info + QString(".server.com");
server_url = QString("t") + info + QString("-") + info + QString(".server.com");

request.setUrl(QUrl(url_str));

reply = access.get(request);
loop_get.exec();

if(reply->error() != QNetworkReply::NoError)
{
throw std::runtime_error(reply->errorString().toStdString());
}

delete reply;

здесь почтовый запрос вызывается сразу после завершения запроса get:

QObject::connect(&access, SIGNAL(finished(QNetworkReply*)), &loop_post, SLOT(quit()));

url_str = "/page_wanted?parameters=5&t=3";

//Assembly the message budy
msg_body = QString("message");

//assembly HTTP header
request.setUrl(QUrl(url_str));
request.setHeader(QNetworkRequest::ServerHeader, server_url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlenconded");
request.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(message.size()));

reply = access.post(request, QByteArray(message.toStdString().c_str()));

loop_post.exec();

if(reply->error() == QNetworkReply::NoError)
{
qDebug() <<"that's ok:\n"<<reply->readAll();
}
else
{
qDebug() <<"That's not ok:\n"<<reply->errorString();
}

delete reply;

возвращенная ошибка:

That's not ok:
"Protocol "" is unknown"

Я не знаю, как это сделать, выполняя поиск в Google, я нашел только примеры, которые приводят меня к этому пути, поэтому, если кто-то может помочь, я буду вам благодарен. 🙂

1

Решение

Линия

url_str = "/page_wanted?parameters=5&t=3";

отсутствует знак плюс: D попробуй

url_str += "/page_wanted?parameters=5&t=3";

и тебе должно быть хорошо идти …

0

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

Следующее сообщение об ошибке должно быть полным:

"Protocol "" is unknown"

Это означает, что модуль qtnetwork, который вы пытаетесь использовать, не нашел протокол в URL-адресе запроса, то есть «http», «ftp» и т. Д.

Это должно дать намек, что вы по какой-то причине забыли отправить это. В противном случае вы отправили неизвестного. Если вы посмотрите на свой код построения URL-адреса, то увидите, что оттуда пропускаете протокол и местоположение в сети, потому что вы переопределяете это с помощью подстроки, а не добавляете. Это строка, на которую я ссылаюсь:

url_str = "/page_wanted?parameters=5&t=3";

Правильное исправление — переопределение существующего имени протокола и сетевого расположения, а не переопределение. Таким образом, вы будете писать что-то вроде этого:

url_str.append("/page_wanted?parameters=5&t=3");

Это один типичный случай использования, когда использование комплексных именованных методов может избежать, возможно, непреднамеренной опечатки между = а также +=,

0

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