| Autor |
Nachricht |
Tsunami
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.05.2006
Beiträge: 49
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
-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
|
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
|
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 |
|
|
|
 |
|
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.
|
|
|
|
|