QHttp::post und QHttp::request

Alles rund um die Programmierung mit Qt
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

QHttp::post und QHttp::request

Beitrag 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....
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QHttp::post und QHttp::request

Beitrag 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.
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag von madRenEGadE »

welches Qt Beispiel nutzt denn request? ich hatte unter den Network Examples keins gefunden.... wozu gibt es eigentlich post?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Ja, super. Und warum wurde mir da kein Update angeboten :( Gut zu wissen, mir fehlen da noch mehrere Erweiterungen.
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag 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.....
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag von madRenEGadE »

ja ich hab ne seite mit dem script aba da gehn eben nur die header rüber und Data nich...
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Liegt die Seite im Netz, das man sich die mal angucken kann?
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Ich meinte die Seite, mit der du die Daten verschickst oder das PHP-Skript, welches die Daten empfängt.
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag von madRenEGadE »

verschicken tu ich die daten über das programm und der link is die datei die die daten empfängt
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag 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
Antworten