QHttp: einfacher download einer php seite?

Alles rund um die Programmierung mit Qt
Antworten
wayneos
Beiträge: 38
Registriert: 28. Oktober 2008 14:09

QHttp: einfacher download einer php seite?

Beitrag von wayneos »

hallo,

hab mich durch die ganzen examples von qt gequält aber leider bin ich immer noch nicht wirklich schlau draus geworden.

ich will mit qhttp einfach eine php seite von einem server runterladen und dann den inhalt als string zur verfügung haben. die datei muss nicht zwingend gespeichert werden, bzw wieder gelöscht werden wenn der String mit dem inhalt vorhanden ist.

wie müsste das in der einfachsten ausführung (ohne fehlermeldungen) aussehen?

vielen dank im vorraus
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Hallo, wie genau stellst Du Dir das vor?
Willst Du den PHP-Quelltext haben oder die HTML-Ausgabe?

Den PHP-Quelltext wirst Du mit QHttp nicht kriegen. Die HTML-Ausgabe kannst Du mit der Methode readAll() holen nachdem das Signal done() gesendet wurde.

Gruß RD1978
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Code: Alles auswählen

 QBuffer m_buf;
 QHttp m_http;
 int m_idGet;

 ...
 m_buf.open(QBuffer::ReadWrite);
 m_http.setHost("www.trolltech.com");
 m_idGet = m_http.get(QUrl::toPercentEncoding("/index.html"), &m_buf);
Und dann auf requestFinished() mit m_idGet warten.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wayneos
Beiträge: 38
Registriert: 28. Oktober 2008 14:09

Beitrag von wayneos »

danke für die antworten.

doch leider steig ich da gar nicht durch! was ich genau machen will ist: mit QHttp eine php datei mit post-data aufrufen und das ergebnis(den quelltext) wieder in einem string zu haben:

in etwa so:

Code: Alles auswählen

QBuffer buff;
QHttp http;
int id;

QString host = "http://blabla.../";
QString data = "fx=test&pg=2";

buff.open (QBuffer::ReadWrite);
http.setHost (host);
id = http.post (QUrl::toPercentEncoding ("/output.php"), data, &buff);

QString new = buff.readall ();
aber irgendwie will das nicht so wirklich! die ausgabe der php seite ist nur ein text mit 10 buchstaben. was mach ich falsch?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Man sollte schon warten bis das requestFinished() - Signal kommt... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wayneos
Beiträge: 38
Registriert: 28. Oktober 2008 14:09

Beitrag von wayneos »

versteh ich dich richtig? der int gibt das signal zurück? ausserdem bekomm ich für folgende zeile:

Code: Alles auswählen

id = http.post (QUrl::toPercentEncoding ("/output.php"), data, &buff);
folgende fehlermeldung:

Code: Alles auswählen

no matching function for call to `QHttp::post(QByteArray, QString&, QBuffer**)
was stimmt daran nicht?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

wayneos hat geschrieben:versteh ich dich richtig? der int gibt das signal zurück?
Ist es so schwer ne Doku zu lesen? Da steht doch nun alles!
folgende fehlermeldung:
wayneos hat geschrieben:

Code: Alles auswählen

no matching function for call to `QHttp::post(QByteArray, QString&, QBuffer**)
was stimmt daran nicht?
m_buf ist bei Dir ein Pointer, also ist &m_buf ein Pointer auf einen Pointer. C Basics würde ich sagen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wayneos
Beiträge: 38
Registriert: 28. Oktober 2008 14:09

Beitrag von wayneos »

ok merci! aber auch ohne das & zeichen kommt der fehler!

ps...das & ist aus deinem ersten beispiel übernommen!
VuuRWerK
Beiträge: 82
Registriert: 11. Juni 2007 20:46
Wohnort: Dresden

Beitrag von VuuRWerK »

wayneos hat geschrieben:ok merci! aber auch ohne das & zeichen kommt der fehler!

ps...das & ist aus deinem ersten beispiel übernommen!
Da ist m_buf aber kein pointer auf QBuffer sondern ein Objekt. Das & vor einem Objekt bewirkt das übergeben des Pointers auf das Objekt. Aber wie schon gesagt wurde sind das Basics die man vorher wissen sollte bevor man Qt verwendet ;)

Gut Schuß
Christian ;)
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel.
Oft ist die Ursache des schwarzsehens lediglich ein verrutschen des Bretts vorm Kopf =)
wayneos
Beiträge: 38
Registriert: 28. Oktober 2008 14:09

Beitrag von wayneos »

ja das verstehe ich schon! aber kannst du mir den uterschied zwischen seinem ersten beispiel und meinem antwortpost darauf erklären

ich versteh nicht wieso es bei mir kein Objekt ist?
wayneos
Beiträge: 38
Registriert: 28. Oktober 2008 14:09

Beitrag von wayneos »

ok hab nun folgendes gebastelt.

infotabelle.h

Code: Alles auswählen

#ifndef INFOTABELLE_H
#define INFOTABELLE_H

#include <QWidget>
#include <QComboBox>
#include <QUrl>
#include <QBuffer>

class start : public QWidget {
	
	Q_OBJECT
	
	public:
		start (QWidget *parent = 0);
		
		QComboBox *cobx;
		QBuffer *buff;
		
	public slots:
		void refresh ();
		void roger ();
		
	signals:
		void changed (QString);
				
};

#endif
infotabelle.cpp

Code: Alles auswählen

#include "infotabelle.h"

#include <QApplication>
#include <QHttp>
#include <QHttpRequestHeader>

start::start (QWidget *parent) : QWidget (parent) {
	
	cobx = new QComboBox (this);
	
}

void start::refresh () {
	
	QString host = "http://...";
	QString data = "fx=start&lh=";
	
	buff = new QBuffer;
	buff -> open (QBuffer::ReadWrite);
	
	QHttp *http;
	QHttpRequestHeader header ("POST", "/output.php");
	header.setValue("Host", host);
	 
	http -> setHost (host);
	header.setValue ("User-Agent", "User Agent");
	header.setContentType ("application/x-www-form-urlencoded");

	http -> request (header, data.toUtf8 (), buff);
	connect (http, SIGNAL (requestFinished ()), this, SLOT (roger ()));

}

void start::roger () {
	
	QString output;
	output = buff -> readAll ();
	
	QStringList list;
	list = output.split("--");
	
	int l = list.size ();
	
	for (int i = 0; i < l; i++) {
		
		cobx -> addItem (tr ("1%").arg (list.at (i)));
		
	}
	
}
es lässt sich ohne fehler compilen aber sobald dann das programm refresh () ausführt kommt ein appcrash des moduls qtnetwork4.dll..

was soll das bedeuten?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Dann schau dir deinen Quellcode nochmal genau(!) an, oder verwende einen Debugger.
wayneos
Beiträge: 38
Registriert: 28. Oktober 2008 14:09

Beitrag von wayneos »

das hab ich jetzt schon des öfteren! doch leider komm ich nicht drauf wie ich das realisieren kann. kannst du mir nicht einfach sagen wo der fehler ist, bzw wie ich es zum laufen bekomme?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Tja das kommt davon wenn man mit Pointern arbeitet wo es total unnötig ist - uninitialiserte Pointer und Memleaks...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten