Ich habe diesen ganzen Tag ohne Erfolg versucht. Bitte helfen Sie bei der Lösung des Problems. Beim Googlen fand ich viele Benutzer, die dieses Problem hatten, aber nirgendwo konnte ich eine Lösung finden.QT HTTP Post-Problem, wenn Server Cookies benötigt
Ich versuche, HTTP-Post in QT C zu tun ++ & Ich habe bereits versucht, dass in Python zu tun (Meine Frage ist nicht ein Python-Frage, so Profis Qt bitte helfen) .. Ich weiß, ich bin irgendwo falsch Umgang mit Cookies und alle, also bitte helfen. Bitte geben Sie mögliche Lösungen an.
In Python ist Code sauber und einfach. Ich habe die Fehlerbehandlung und alle zusätzlichen Dinge entfernt, um es einfacher zu machen.
url = 'http://www.example.com/'
data = 'username=abc&password=passwd'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
usock = opener.open(url, data)
#>>>>>> NOW, I have the cookiejar <<<<<<<<<
opener.addheaders = [('Referer','http://www.example.com/xyz.php'),('User-Agent','Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20091020 Ubuntu/9.10 (karmic) Firefox/3.5.3 GTB7.0')]
data_to_send = 'ABCDEFGH'
url_send = "http://www.example.com/xyz.php"
send = opener.open(url_send,data_to_send)
Die QT-äquivalent ich gemacht: -
void SmsSender::sendToMyCantos()
{
manager = new QNetworkAccessManager(this);
manager->setCookieJar(new QNetworkCookieJar(manager));
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
request.setUrl(QUrl("http://www.mycantos.com"));
postData.append("username=abc&password=passwd");
manager->post(request,postData);
//>>>>>> So, I feel that I have CookieJar now to make POST <<<<<<<
request.setRawHeader("Referer","http://www.example.com/xyz.php");
request.setRawHeader("User-Agent","Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20091020 Ubuntu/9.10 (karmic) Firefox/3.5.3 GTB7.0");
postData.clear();
postData.append("ABCDEFGH");
request.setUrl(QUrl("http://www.example.com/xyz.php"));
manager->post(request,postData);
}
Nun das Problem ist, dass ich nicht in der Lage bin gleich in QT zu tun. Ich bin vor Probleme:
- Umgang mit Cookies
- Handhabung Umleitungen (HTTP 302)
- Cookies Halte für alle künftigen POST
dies geschieht automatisch in Python zu machen. Im Folgenden wird der Code nicht direkt verwandt, aber ich codiert diese in der POST zu ermöglichen Umleitungen .. Der Code very similar to the link I used to make it..
QUrl SmsSender::redirectUrl(const QUrl& possibleRedirectUrl,
const QUrl& oldRedirectUrl) const {
//Checking infinite resursions
QUrl redirectUrl;
if(!possibleRedirectUrl.isEmpty() &&
possibleRedirectUrl != oldRedirectUrl) {
redirectUrl = possibleRedirectUrl;
}
return redirectUrl;
}
void SmsSender::replyFinished(QNetworkReply *reply)
{
QVariant possibleRedirectUrl =
reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
QVariant data_size = reply->header(QNetworkRequest::ContentLengthHeader);
qDebug()<<data_size.toFloat();
qDebug()<<manager->cookieJar()->cookiesForUrl(QUrl("http://www.example.com"));
/* We'll deduct if the redirection is valid in the redirectUrl function */
_urlRedirectedTo = this->redirectUrl(possibleRedirectUrl.toUrl(),
_urlRedirectedTo);
/* If the URL is not empty, we're being redirected. */
if(!_urlRedirectedTo.isEmpty()) {
QString text = QString("SmsSender::replyFinished: Redirected to ")
.append(_urlRedirectedTo.toString());
qDebug(text.toAscii());
// Do again in case we have more redirections
this->_qnam->get(QNetworkRequest(_urlRedirectedTo));
}
else
{
QString text = QString("SmsSender::replyFinished: Arrived to ")
.append(reply->url().toString());
qDebug(text.toAscii());
_urlRedirectedTo.clear();
}
}
QNetworkAccessManager* SmsSender::createQNAM() {
QNetworkAccessManager* qnam = new QNetworkAccessManager(this);
/* We'll handle the finished reply in replyFinished */
connect(qnam, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
return qnam;
}
Dies ist mein erster Versuch, QT zu verwenden, um eine App zu erstellen, also bitte bitte mit mir, wenn es nicht gemäß den Standards richtig ist. –