Seite 1 von 2
QHttp::post und QHttp::request
Verfasst: 23. Februar 2006 18:06
von madRenEGadE
Ich wollte per QHttp eine Postanfrage an eine PHP Datei senden hab aber absolut keine Ahnung wie das geht. Ich dachte man kann einfach QHttp::post dafür nehmen aber irgendwo habe ich gelesen das das nicht geht und man request nutzen muss.... aber bei request seh ich absolut nicht durch mit diesem ganzen header zeugs und deshalb wollte ich mal Fragen wie ich nun diese Postanfrage sende?!
Ich möchte lediglich einen 2 Namen an die PHP Datei übergeben....
Re: QHttp::post und QHttp::request
Verfasst: 24. Februar 2006 07:30
von macman
madRenEGadE hat geschrieben:deshalb wollte ich mal Fragen wie ich nun diese Postanfrage sende?!
Für Firefox 1 gab es die schöne Erweiterung Live HTTP Headers. Damit konnte man schön mitverfolgen, was bei einem POST-Request verschickt wird. Es gibt aber auch andere externe Tools, die das machen. Damit guckst Du dir das an und der Rest ist etwas Fummelei, bis dann etwa sowas dabei raus kommt:
Code: Alles auswählen
QHttpRequestHeader header("POST", url.path());
header.setValue("Host", url.host());
header.setValue("User-Agent", "MyQtApp" + version);
header.setValue("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
header.setValue("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
header.setValue("Accept-Encoding", "gzip,deflate");
header.setValue("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
header.setValue("Keep-Alive", "300");
header.setValue("Connection", "keep-alive");
header.setValue("Referer", "MyQtApp " + version);
header.setValue("Authorization", "Basic SG9sem1hOmN1dDJzaXpl");
header.setValue("Content-Type", "multipart/form-data boundary=---------------------------125282808721657");
bytes = new QByteArray();
bytes->append("-----------------------------125282808721657\n"); // Das hier ist ein Dummy-Feldname, damit
bytes->append("Content-Disposition: form-data; name="upload"\n"); // das auch als POST wahr genommen wird
bytes->append("\nUploadFile\n");
// und jetzt kommen die einzelnen Files
QString name, dateiName;
file = new QFile();
for (int l=0; l<files.count(); l++)
{
QFileInfo fileInfo(files[l]);
file->setFileName(files[l]);
dateiName = fileInfo.fileName();
if (!file->exists())
{
printf("File %S doesn't exist.\n", files[l].utf16());
delete file;
file = 0;
exit(-1);
}
if (!file->open(QIODevice::ReadOnly))
{
printf("Unable to read the file %S: %S.",dateiName.utf16(), file->errorString().utf16());
delete file;
file = 0;
exit(-1);
}
bytes->append("-----------------------------125282808721657\n");
bytes->append("Content-Disposition: form-data; name="datei[" + QString::number(l));
bytes->append("]"; filename="" + dateiName + ""\n");
bytes->append("Content-length: " + QString::number(fileInfo.size()));
bytes->append("\nContent-Type: text/plain\n\n");
bytes->append(file->readAll());
file->close();
}
buffer = new QBuffer(bytes);
if (resultFile=="")
resultFile = "result.html";
QDir d;
if (d.exists(resultFile))
d.remove(resultFile);
logFile = new QFile(resultFile);
file->open(QIODevice::ReadWrite);
httpPostId = http->request(header, buffer, logFile);
Mit diesem Beispiel können mehrere Files per HTTP hoch geladen werden. Den Rest mußt Du dir aus dem Qt-Beispiel zusammen suchen.
Verfasst: 24. Februar 2006 11:07
von madRenEGadE
welches Qt Beispiel nutzt denn request? ich hatte unter den Network Examples keins gefunden.... wozu gibt es eigentlich post?
Verfasst: 24. Februar 2006 11:22
von macman
Kein Beispiel nutzt request, aber Du kannst im Http-Beispiel den QHttp-Part durch QHttpRequestHeader ersetzen. Ich meinte auch das ganze Zusammenspiel mit den einzelnen Signalen.
Aus der post-Methode selbst bin ich auch noch nicht schlau geworden. Hab mich aber nicht weiter mit beschäftigt, da sie für meine Anforderungen eh nicht geeignet war.
Verfasst: 24. Februar 2006 11:36
von madRenEGadE
so jetz bin ich wieder einmal froh firefox zu nutzen ^^ Live Http Header gibts auch für ff 1.5 und das scheint echt genial zu sein
Verfasst: 24. Februar 2006 11:53
von macman
Ja, super. Und warum wurde mir da kein Update angeboten

Gut zu wissen, mir fehlen da noch mehrere Erweiterungen.
Verfasst: 24. Februar 2006 12:25
von madRenEGadE
http://downloads.mozdev.org/livehttphea ... s-0.12.xpi
bidde schön ^^
Code: Alles auswählen
url.setUrl(Urlname);
QHttpRequestHeader header("POST", url.path());
header.setValue("Host", url.host());
header.setValue("User-Agent", "TR-Messager v0.1.1");
header.setValue("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
header.setValue("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
header.setValue("Accept-Encoding", "gzip,deflate");
header.setValue("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
header.setValue("Keep-Alive", "300");
header.setValue("Connection", "keep-alive");
header.setValue("Referer", "TR-Messager v0.1.1");
header.setValue("Content-Type", "application/x-www-form-urlencoded");
header.setValue("Content-Length", "20");
Data.append("username=madRenEGadE");
File.setFileName(Filename);
File.open(QIODevice::Truncate | QIODevice::WriteOnly);
Http.request(header, Data, &File);
so also die header müssten stimmen aber ich glaube das die Zeile mit Data.append nich richtig ist aber das kann ich ja nicht mit LiveHttp Header nachgucken wie das richtig sein müsste.....
Verfasst: 24. Februar 2006 12:43
von macman
madRenEGadE hat geschrieben:ich glaube das die Zeile mit Data.append nich richtig ist aber das kann ich ja nicht mit LiveHttp Header nachgucken wie das richtig sein müsste.....
Du musst doch eine Seite haben, mit der du das Skript korrekt ansprechen kannst. Ansonsten bastel dir kurz eine und dann schaust du dir an was da rüber geht.
Verfasst: 24. Februar 2006 12:45
von madRenEGadE
ja ich hab ne seite mit dem script aba da gehn eben nur die header rüber und Data nich...
Verfasst: 24. Februar 2006 12:54
von macman
Liegt die Seite im Netz, das man sich die mal angucken kann?
Verfasst: 24. Februar 2006 12:57
von madRenEGadE
die seite gibt nur den text hallo aus und sollte dahinter den namen anzeigen den man per post mitgeschickt hat
http://www.the-reality.net/trm/checkVersion2.php
Verfasst: 24. Februar 2006 12:59
von macman
Ich meinte die Seite, mit der du die Daten verschickst oder das PHP-Skript, welches die Daten empfängt.
Verfasst: 24. Februar 2006 13:01
von madRenEGadE
verschicken tu ich die daten über das programm und der link is die datei die die daten empfängt
Verfasst: 24. Februar 2006 13:03
von macman
Ich möchte es nach voll ziehen. Ich will selbst sehen, was da anscheinend nicht verschickt wird. Oder gib mir einfach den Namen der Variablen, den das Skript auswertet.
Verfasst: 24. Februar 2006 13:05
von madRenEGadE
das skript erwartet nur username ($_POST['username'])
mit GET is das alles viel einfacher ^^
jetz kommt irgendwie gar nichts mehr an nich mal der header