QHttp request

Alles rund um die Programmierung mit Qt
Antworten
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

QHttp request

Beitrag 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();
}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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?
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du übergibtst ja auch nur den path() und die Query verwirfst du.
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

und wie übergib ich den query???
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

gibts da eine funktion, die mir den query schickt?

Bitte noch ne antwort
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Eigentlich schon mal die Doku von QUrl nach 'Query' durchsucht?
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

nö aba danke. hab qhttp und so durchsucht.
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag 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???
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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..
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

ja das Speicherleck interessiert mich jetzt aber eher wenig. Ich würde gern die Seite bekommen und das funzt einfach nicht.
Antworten