How to use QNetworkAccessManager post
-
I want to access a site via its URL to https using the post method.
I did this
@
QUrl url (valUrl);
QByteArray parameter;
QString identifiant1 = "& id1 = valeur_id1";
QString identifiant2 = "& id2 = valeur_id2";
QString identifiant3 = "id2 = valeur_id3";
parametre.append (identifiant1);
parametre.append (identifiant2);
parametre.append (identifiant3);maclasse.startRequest (url)
@
and in my class I have this reply
@
qnam.post = (QNetworkRequest (url), parameter);
connect (reply, SIGNAL (readyRead ()), this, SLOT (httpReadyRead ()));
connect (reply, SIGNAL (finished ()), this, SLOT (connectRequestFinished ()));
connect (reply, SIGNAL (error (QNetworkReply: NetworkError)),
this, SLOT (networkErrors (QNetworkReply: NetworkError)));
@
But I have this error message when running and displaying reply-> errorString (): "Erreur inconnue"
What should I do?Edit: I wrapped your code in @ tags to make it readable. Please do that yourself next time; Andre
-
Please, use '@' to format your code nicely, it's not really readable now.
-
You should avoid using the QUrl constructor with an argument. It does not work properly. Instead, use one of the static methods to construct a URL. This is a design error that will be corrected in Qt 5.
This could be the cause of your problem already: an invalid URL.
-
I do this @QUrl url; url.setUrl(valUrl);@
An in my methode httpReadyRead I do this @if(!reply->readAll().isEmpty())
{
QFile compressedFile = new QFile("tempSAF");
compressedFile->open(QIODevice::WriteOnly);
compressedFile->write(reply->readAll());
// char reponse = reply->readAll();
qDebug() << "################# reply->readAll().size() = " << reply->readAll().size();
// for(int i =0; i< sizeof(reponse);i++)
// {
// qDebug() << "################# reponse["<<i<<"] = " << reponse[i];
// }
//for(int)
Etat = true;
}
else
{
qDebug() << "########### Impossible de réccupérer les données ";
Etat=false;
}@
But this methode wase not executed. The reply is empty but the messe @qDebug() << "########### Impossible de réccupérer les données ";@ was not displayed.I have the same error
-
So, you meant that the other qDebug gets displayed?
I'm not exactly sure, but I seem to vaguely remember, that after you do readAll(), QNR is flushed, so you can't really use it again. But I can't find any info on that in Qt 4.7 documentation, so my memory might be wrong here. Try storing the reply and doing the 'if' on the stored data.
-
I have this error message when i use https and post @SSL: "Le nom d'hôte ne correspondait à aucun des hôtes valides pour ce certificat, Le certificat n'est pas sécurisé car auto-signé" @
After this message my application crache
My URL is like this: @https://Ip_machine/xxxxxxx@
What is missing??
-
You will have to handle SSL errors. See for example "this thread":http://developer.qt.nokia.com/forums/viewthread/5861/#35121.
bq. Note that calling ["ignoreSslErrors()":http://doc.qt.nokia.com/latest/qnetworkreply.html#ignoreSslErrors] without restraint may pose a security risk for your application. Use it with care.
-
For example, you can use:
@
forever {
if (replyReceived) {
processReply();
break;
}
else
qApp->processEvents();
}
@
This will not block your app. Substitute if condition and processing with your own. -
[quote author="SamFaye" date="1314899811"]This is because the other instructions are executed while the server response is not received. How to wait for the server response to continue execution of other instructions?[/quote]
Which other instructions? QNAM emits the finished signal when the response is available. This is where your response handling code has to go.
Blocking your application until data is available is usually not the solution, it just covers a severe design flaw.