Seite 1 von 1
QHttp cookies
Verfasst: 18. April 2009 20:58
von XxM4ST3RxX
hallo mein problem ist folgendes:
ich möchte mich auf einer webseite einloggen und eine datei über POST uploaden, aber ich schaffe nicht mal den login weil ich die cookies die ich erhalte noch mit senden muss. hat jemmand vielleicht ein beispiel code oder könnte mir auf die sprünge helfen.
mein code sieht bisher so aus :
Code: Alles auswählen
QUrl url("http://www.uploaded.to/login");
QByteArray data("email=***&password=***");
http->setHost(url.host());
http->post(url.path(), data);
im responseHeader erhalte ich
(QPair("Date","Sat, 18 Apr 2009 18:57:25 GMT") , QPair("Server","Apache/2.2.8 (Ubuntu) mod_python/3.3.1 Python/2.5.2") , QPair("Location","/login?coo=1") , QPair("Cache-Control","no-cache="set-cookie"") , QPair("Set-Cookie","lang=en; path=/; domain=.uploaded.to; expires=Tue, 17-Apr-2012 18:57:25 GMT") , QPair("Set-Cookie","auth=5082375f8598adace94b9151b0f781041792bd; path=/; domain=.uploaded.to; expires=Tue, 17-Apr-2012 18:57:25 GMT") , QPair("Connection","close") , QPair("Transfer-Encoding","chunked") , QPair("Content-Type","text/plain") )
und im http:
""<p>The document has moved <a href="/login?coo=1">here</a></p>"
Verfasst: 18. April 2009 23:18
von FaS
Cookies werden automatisch angenommen und bei kommenden Anfragen mitversendet.
Ich denke bei deiner Anfrage fehlt der Content-Type-Header.
PS: Falls du gerade anfängst mit QHttp: Es wird empfohlen, stattdessen QNetworkAccessManager zu verwenden. Die Handhabung ist etwas komfortabler.
MfG,
FaS
Verfasst: 19. April 2009 04:21
von XxM4ST3RxX
ja ich habe erst mit QHttp angefangen, QNetworkAccessManager habe ich auch schon getestet und bin wieder zurück zu QHttp weil ich auch https brauche und das hat bei mir nicht so geklappt. Und das mit den Content-Type-Header könntest du mir vll ein kleines beispiel liefern, kenne mich nähmlich nicht so gut aus mit dem http protokol habe es mir nur mal flüchtig angeschaut.
Verfasst: 19. April 2009 06:22
von XxM4ST3RxX
habe es jetzt mit dem QNetworkAccessManager hinbekommen nur ist der code meiner meinung nach ein bissl komisch, hat jemmand vll ein besseren umsetzungs vorschlag ?
hier ist mein code für den login ...
Code: Alles auswählen
#include "upload.h"
Upload::Upload() :
manager(new QNetworkAccessManager),
cookieJar(new QNetworkCookieJar)
{
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(finished(QNetworkReply*)));
manager->setCookieJar(cookieJar);
}
Upload::~Upload()
{
delete manager;
delete cookieJar;
}
void Upload::request()
{
QNetworkReply *cookieReply = manager->post(QNetworkRequest(QUrl("http://www.uploaded.to/login")), "email=****&password=****");
connect(cookieReply, SIGNAL(finished()),
this, SLOT(haveCookie()));
}
void Upload::haveCookie()
{
cookieJar->cookiesForUrl(QUrl("http://www.uploaded.to/login"));
manager->get(QNetworkRequest(QUrl("http://www.uploaded.to/home")));
}
void Upload::finished(QNetworkReply *reply)
{
qDebug() << reply->readAll();
}
Verfasst: 19. April 2009 14:53
von FaS
Header
Naja Google meint man muss den Content-Type "application/x-www-form-urlencoded" im Header angeben, ist ja nun wirklich nicht schwer zu finden wenn man nach http post request oder sowas sucht. Außerdem solltest du dir anschauen, wie denn der Browser das macht, z.B. indem man den Traffic mit der Firefox-Erweiterung "Live HTTP headers" verfolgt.
Und in der Qt-Dokumentation findet man dann setHeader(...).
Cookies
Als ich sagte, Cookies werden automatisch übernommen, meinte ich das auch so. Wenn du nicht weißt, was man mit diesen cookieJar-Funktionen macht, lass sie besser alle komplett weg. Dein "cookieJar->cookiesForUrl(...)" beispielsweise hat nichtmal einen Effekt. Du scheinst die Doku nicht zu lesen.
QNetworkReply
Vielleicht solle man sich über die Lebensdauer dieses Objektes gedanken machen, ich bin mir da aber auch nicht sicher. Ich deleteLater es immer im reply-finished-Slot.
HTTPS
Das sollte mit QNetworkAccessManager genauso funktionieren wie mit QHttp. Aber ich bin daran gescheitert, HTTPS-Support überhaupt erstmal zu aktivieren. Man muss doch dafür Qt mit OpenSSL konfigurieren und kompilieren, hatte dabei (unter Win) merkwürdige Kompilierungsfehler.. Wenn du das hinbekommen hast, wäre ich dir für Ratschläge dankbar
MfG,
FaS
Verfasst: 19. April 2009 22:41
von XxM4ST3RxX
das mit der cookieJar habe ich jetzt auch entfernt, danke noch dafür wegen dem QNetworkReply, ich weiss das ich den nicht deletet habe war nur ein testcode und wegen https, habe leider auch gemerkt das beim binary release nicht mitcompiled war, muss das auch noch mal versuchen ...
Verfasst: 20. April 2009 08:41
von franzf
Wenn es absolut nicht klappt mit den Cookies, ist es vllt. dieser bug hier:
http://code.google.com/p/arora/issues/detail?id=244
Lasset uns beten, dass QtSoftware diese Fixes aufnimmt
