Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Andere GUIs - Qt, GTK+, wxWidgets ::  Proxy mit Qt entwickeln  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Tsunami
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.05.2006
Beiträge: 49
Beitrag Tsunami Mitglied 14:01:33 16.03.2012   Titel:   Proxy mit Qt entwickeln            Zitieren

Hallo!

Ich würde gerne einen eigenen kleinen Webproxy entwickeln, der die Daten vom Browser empfängt und weiterleitet, ähnlich wie Privoxy zum Beispiel. Ich habe da auch ein schönes Beispiel eines Qt-Entwicklers gefunden, der einen solchen Proxy in weniger als 100 Zeilen in Qt realisiert hat. Der funktioniert wunderbar, hat aber leider das Problem, dass er keine POST-Requests kann. Man kann also weder Daten hochladen noch kann man Suchmaschinen benutzen, wo die Suchanfrage via POST verschickt wird.

Ich habe bereits allerlei probiert um dieses wichtige Feature einzubauen, komme aber leider absolut nicht weiter. Selbst mit dem in Qt 4.8.0 QHttpMultiPart, was POST sehr stark vereinfachen soll, kriege ich kein funktionierendes Programm hin.

Kann mir vielleicht jemand helfen?

Den Source habe ich mal hier hochgeladen: http://www.file-upload.net/download-4190649/proxy.zip.html
Mechanics
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.01.2012
Beiträge: 1436
Beitrag Mechanics Mitglied 21:46:19 16.03.2012   Titel:              Zitieren

Viel zu umständlich, und die Frage ist viel zu allgemein. Was geht nicht? Was kriegst du nicht hin?
Tsunami
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.05.2006
Beiträge: 49
Beitrag Tsunami Mitglied 13:32:31 17.03.2012   Titel:              Zitieren

Moin,

ich verstehe nicht, was du mit "viel zu umständlich" meinst. Zu der Frage hin, was ich nicht hinkriege: Das Programm kann keine POST-Requests verarbeiten. Ich habe bereits versucht das einzubauen, komme da aber leider nicht weiter.
Mechanics
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.01.2012
Beiträge: 1436
Beitrag Mechanics Mitglied 19:09:35 17.03.2012   Titel:              Zitieren

Tsunami schrieb:
Moin,

ich verstehe nicht, was du mit "viel zu umständlich" meinst. Zu der Frage hin, was ich nicht hinkriege: Das Programm kann keine POST-Requests verarbeiten. Ich habe bereits versucht das einzubauen, komme da aber leider nicht weiter.


Es ist viel zu umständlich, deinen Code runterzuladen und sich anzuschauen. Warum sollte sich das jemand antun? Und "ich komme nicht weiter" ist keine Frage. Pech für dich. Lern programmieren. Sehe auch keinen Grund, warum jemand was für dich programmieren sollte oder dir alles vorkauen sollte. Wenn du eine konkrete Frage hast wie "hier sind die relevanten 20 Zeilen Code und leider wird nur der halbe Mime Type ausgelesen", dann kannst sie stellen. Sonst vergiss es.
Tsunami
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.05.2006
Beiträge: 49
Beitrag Tsunami Mitglied 19:21:49 17.03.2012   Titel:              Zitieren

Hört sich so an, als ob du den Sinn eines Forums nicht verstanden hättest. Wenn du nicht weißt warum "man sich das antun sollte", dann lass es einfach. Inhaltlose Kommentare bringen keinen weiter.
Mechanics
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.01.2012
Beiträge: 1436
Beitrag Mechanics Mitglied 20:10:08 17.03.2012   Titel:              Zitieren

Ach, deswegen hast du schon so viele sinnvolle Antworten bekommen? Na dann, viel Spass ;)
Softwaremaker
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.08.2007
Beiträge: 354
Beitrag Softwaremaker Mitglied 20:34:25 17.03.2012   Titel:   Proxy mit Qt entwickeln            Zitieren

@Tsunami:
Keiner braucht deinen ganzen Code, poste doch hier einfach die wichtigen Teile und wo es Probleme gibt. Das erhöht die Wahrscheinlichkeit, dass dir einer hilft.
-lowbyte-
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.10.2010
Beiträge: 372
Beitrag -lowbyte- Mitglied 20:46:20 17.03.2012   Titel:              Zitieren

Ohne Code nix los! Oder was willst Du? Die 100 Zeilen Code die Dir nicht vorliegen?

_________________
XOR-BASE http://xor-base.dynu.net
News: C-Library SMTPLIBEXv1.06 Release 18.06.2013
Zeus
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.09.2003
Beiträge: 2871
Beitrag Zeus Mitglied 20:46:41 17.03.2012   Titel:              Zitieren

Evtl. entsprechende RFC lesen, um seinen Hintergrundwissen aufzubauen.
Tsunami
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.05.2006
Beiträge: 49
Beitrag Tsunami Mitglied 12:27:08 18.03.2012   Titel:              Zitieren

Gut, da sich die meisten hier einen Teil des Codes wünschen, hier ist über die Hälfte des Teils was relevant ist. Um das Problem noch einmal zu nennen, GET-Requests werden einwandfrei ausgeführt allerdings funktionieren POST-Requests nicht. In diesem Falle ist die URL leer (Zeile 15), wenn man dieses Problem behebt im Source und das Programm versucht POST genauso wie GET abzusetzen, dann erhalte ich von dem Server, der die Daten bekommt, Fehlermeldungen wie "Bad Request". Alles was ich bisher versucht habe, produzierte bei der Gegenstelle einen Fehler.

Daher die allgemeine Frage, weiß jemand wie man das beheben kann oder muss ich für POST auf QHttpMultiPart zurückgreifen?

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    void processQuery() {
        QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
        QByteArray requestData = socket->readAll();
 
        int pos = requestData.indexOf("\r\n");
        QByteArray requestLine = requestData.left(pos);
        requestData.remove(0, pos + 2);
 
        QList<QByteArray> entries = requestLine.split(' ');
        QByteArray method = entries.value(0);
        QByteArray address = entries.value(1);
        QByteArray version = entries.value(2);
 
        QUrl url = QUrl::fromEncoded(address);
        if (!url.isValid()) {
            qWarning() << "Invalid URL:" << url;
            socket->disconnectFromHost();
            return;
        }
 
        QString host = url.host();
        int port = (url.port() < 0) ? 80 : url.port();
        QByteArray req = url.encodedPath();
        if (url.hasQuery())
            req.append('?').append(url.encodedQuery());
        requestLine = method + " " + req + " " + version + "\r\n";
        requestData.prepend(requestLine);
 
        QString key = host + ':' + QString::number(port);
        QTcpSocket *proxySocket = socket->findChild<QTcpSocket*>(key);
        if (proxySocket) {
            proxySocket->setObjectName(key);
            proxySocket->setProperty("url", url);
            proxySocket->setProperty("requestData", requestData);
            proxySocket->write(requestData);
        } else {
            proxySocket = new QTcpSocket(socket);
            proxySocket->setObjectName(key);
            proxySocket->setProperty("url", url);
            proxySocket->setProperty("requestData", requestData);
            connect(proxySocket, SIGNAL(connected()), this, SLOT(sendRequest()));
            connect(proxySocket, SIGNAL(readyRead()), this, SLOT(transferData()));
            connect(proxySocket, SIGNAL(disconnected()), this, SLOT(closeConnection()));
            connect(proxySocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(closeConnection()));
            proxySocket->connectToHost(host, port);
        }
    }
 
    void sendRequest() {
        QTcpSocket *proxySocket = qobject_cast<QTcpSocket*>(sender());
        QByteArray requestData = proxySocket->property("requestData").toByteArray();
        proxySocket->write(requestData);
    }
 
    void transferData() {
        QTcpSocket *proxySocket = qobject_cast<QTcpSocket*>(sender());
        QTcpSocket *socket = qobject_cast<QTcpSocket*>(proxySocket->parent());
        socket->write(proxySocket->readAll());
    }



@-lowbyte- mir zu unterstellen ich würde keinen Source mitliefern, obwohl er oben komplett verlinkt ist, ist wohl irgendwie daneben, oder?requestData
c++.de :: Andere GUIs - Qt, GTK+, wxWidgets ::  Proxy mit Qt entwickeln  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.