я пытаюсь пройти аутентификацию на онлайн-сервере, но я не могу выбрать страницу, которую хочу скачать, вот мой код:
Запрос на получение:
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, я нашел только примеры, которые приводят меня к этому пути, поэтому, если кто-то может помочь, я буду вам благодарен. 🙂
Линия
url_str = "/page_wanted?parameters=5&t=3";
отсутствует знак плюс: D попробуй
url_str += "/page_wanted?parameters=5&t=3";
и тебе должно быть хорошо идти …
Следующее сообщение об ошибке должно быть полным:
"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");
Это один типичный случай использования, когда использование комплексных именованных методов может избежать, возможно, непреднамеренной опечатки между =
а также +=
,