Seite 1 von 1

QHttp request

Verfasst: 21. Februar 2009 14:01
von reuabreliz
Also ich will an eine Seite einen Get Request schicken. Dabei will ich ihm aber verschiedene Parameter übermitteln. z.B.: username=hugo&password=pass&addresse=nirvana

Bis jetzt hab ich nur geschaft, die Seite zu bekommen. Aber wie mach ich so einen spezifischen Request?Weil einfach die url auf http://www.xxx.xx/xxx?username=hugoo&password=pass funktioniert ja nicht.

mein code:

Code: Alles auswählen

#include <QHttpRequestHeader>
#include <QHttp>
#include <QUrl>
#include <QFileInfo>
#include <QFile>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QWidget>
#include <QHBoxLayout>


class MyHttpWidget : public QWidget
{
	Q_OBJECT

	public: 
		MyHttpWidget(QWidget *parent = 0);
	
	public slots:
		void getStellenAngebote();
		void httpRequestFinished();		

	private:
		QHttp *http;
		QFile *file;
		QPushButton *okButton;
		QLineEdit *urlEdit;
		QLabel *statusLabel;
		QHBoxLayout *hLayout;
};

Code: Alles auswählen

#include "myHttpWidget.h"
#include <QDebug>

MyHttpWidget::MyHttpWidget(QWidget *parent) : QWidget(parent)
{
	okButton = new QPushButton("ok");
	urlEdit = new QLineEdit("URL");	
	statusLabel = new QLabel();
	hLayout = new QHBoxLayout();

	
	hLayout->addWidget(urlEdit);
	hLayout->addWidget(statusLabel);
	hLayout->addWidget(okButton);
	
	http = new QHttp(this);
	
	connect( http, SIGNAL(requestFinished(int, bool)), this, SLOT(httpRequestFinished()) );
	connect( okButton, SIGNAL( clicked() ), this, SLOT(getStellenAngebote()) );
	
	setLayout(hLayout);
	urlEdit->setFocus();
	show();
}

void MyHttpWidget::getStellenAngebote()
{
	QUrl url = urlEdit->text();

	QString fileName = "xxx";
	QFile::remove(fileName);
	file = new QFile(fileName);
	
	if(!file->open(QIODevice::WriteOnly))
	{
		qDebug() << "File konnte nicht geöffnet werden";
		return;
	}

	QHttp::ConnectionMode mode = url.scheme().toLower() == "https" ? QHttp::ConnectionModeHttps : QHttp::ConnectionModeHttp;
     http->setHost(url.host(), mode, url.port() == -1 ? 0 : url.port());

	QByteArray path = QUrl::toPercentEncoding(url.path(), "!$&'()*+,;=:@/");
    if (path.isEmpty())
   		path = "/";
	requestHeader = new QHttpRequestHeader("GET",path);

	http->get(path,file);
	statusLabel->setText("Get");
}


void MyHttpWidget::httpRequestFinished()
{
	statusLabel->setText("Finished");
	file->write("finished");
	file->close();
}

Verfasst: 21. Februar 2009 20:06
von upsala
Bis jetzt hab ich nur geschaft, die Seite zu bekommen. Aber wie mach ich so einen spezifischen Request?Weil einfach die url auf http://www.xxx.xx/xxx?username=hugoo&password=pass funktioniert ja nicht.
Und warum sollte das nicht funktionieren?

Verfasst: 22. Februar 2009 20:03
von reuabreliz
Ich habs ja probiert. aber er gibt mir statt http://www.xxx.xx/xxx?username=hugoo&password=pass, das gleiche wie wenn ich die GET Argumente weglasse aus.
In meinem Fall:

http://www.careesma.at/Jobs-suchen/Bund ... ltIndex=60

gibt er mir nicht die Stellen von 61-80 aus sondern von 1-20 aus.

Verfasst: 22. Februar 2009 20:26
von upsala
Du übergibtst ja auch nur den path() und die Query verwirfst du.

Verfasst: 22. Februar 2009 20:32
von reuabreliz
und wie übergib ich den query???

Verfasst: 22. Februar 2009 21:03
von reuabreliz
gibts da eine funktion, die mir den query schickt?

Bitte noch ne antwort

Verfasst: 22. Februar 2009 21:27
von upsala
Eigentlich schon mal die Doku von QUrl nach 'Query' durchsucht?

Verfasst: 22. Februar 2009 21:36
von reuabreliz
nö aba danke. hab qhttp und so durchsucht.

Verfasst: 22. Februar 2009 22:09
von reuabreliz
Also ich verstehs nicht. Hab das jetzt mit addQueryItem() probiert, aber das geht immer noch nicht. Er ladet mir wie zuvor nur die ersten Suchergebnisse von der Seite in meine Datei. Muss ich das anders machen oder hab ich wo einen Fehler???

Verfasst: 23. Februar 2009 08:15
von solarix
mein gott jetzt schau dir doch einfach mal dein code an... wie soll denn das funktionieren....?

Wenn man den PFAD(!) der URL übergibt... dann kriegt man diesen eben auch...

Code: Alles auswählen

   QByteArray path = QUrl::toPercentEncoding(url.path(), "!$&'()*+,;=:@/");
   ....
   http->get(path,file); 
Schon mal

Code: Alles auswählen

   http->get(urlEdit->text(),file);
versucht? Oder schonmal getestet was du da verlangst?

Code: Alles auswählen

   QByteArray path = QUrl::toPercentEncoding(url.path(), "!$&'()*+,;=:@/");
   ....
   qDebug() << "Download der folgenden URL: " << path;
   http->get(path,file); 
[EDIT]
Und überleg dir mal zu jedem "new", wo die Instanz wieder gelöscht wird... Du hast noch ein Speicherleck in deinem Programm..

[EDIT2]
hab upsalas post überlesen...das Speicherleck jedoch dürfte trotzdem noch Bestand haben..

Verfasst: 23. Februar 2009 09:39
von reuabreliz
ja das Speicherleck interessiert mich jetzt aber eher wenig. Ich würde gern die Seite bekommen und das funzt einfach nicht.