Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Domainname bzw. IP-Adresse bekommen (https://www.delphipraxis.net/78308-domainname-bzw-ip-adresse-bekommen.html)

Andreas L. 2. Okt 2006 22:38


Domainname bzw. IP-Adresse bekommen
 
Hi,
ich verwende die Indy-Komponenten TIdHTTPProxyServer. Dort kann ich den Header mittels der Variable AHeader und das Dokument mit ADocument auslesen. Mein Problem ist jetzt das ich in ADocument sowie AHeader aber nicht die Domain oder IP-Adresse bekomme. Gibts da ne Möglichkeit? Ich bekomme immer nur den relativen Pfad. Z. B. /index.php Ich brauche aber http://www.delphiforum.de/index.php

Andreas L. 3. Okt 2006 09:22

Re: Domainname bzw. IP-Adresse bekommen
 
Kennt sich damit den niemand aus?

3_of_8 3. Okt 2006 09:36

Re: Domainname bzw. IP-Adresse bekommen
 
Pushen erst nach 24 Stunden.

Dann schau dir mal das an.

Andreas L. 3. Okt 2006 11:21

Re: Domainname bzw. IP-Adresse bekommen
 
Zitat:

Zitat von 3_of_8
Pushen erst nach 24 Stunden.

Bist du ein Mod? Ehrlich gesagt hättest du dir lieber den Post genauer durchlesen sollen als die Uhrzeit zu betrachten. Trotzdem danke...

Zitat:

Zitat von 3_of_8
Dann schau dir mal das an.

Das Problem ist ja das ich erstmal den Domainnamen (z. B. http://www.delphipraxis.net) bekommen muss. In AHeader steht aber immer nur der relative Pfad zum Dokument sowie in ADocument. Weiß jemand wie das geht?

alcaeus 3. Okt 2006 12:48

Re: Domainname bzw. IP-Adresse bekommen
 
Moin,

du koenntest versuchen, ueber den HTTP-Request dranzukommen. Dieser sieht z.B. so aus:
Code:
GET|POST|... dateiname.ext HTTP/1.1
HOST: w[b][/b]ww.deinedomain.com
Connection: close
Der Host identifiziert die Root-Domain. Wie du ueber die Indys da drankommst, weiss ich jetzt aber auch nicht.

Greetz
alcaeus

Andreas L. 3. Okt 2006 12:51

Re: Domainname bzw. IP-Adresse bekommen
 
Zitat:

Zitat von alcaeus
Moin,

du koenntest versuchen, ueber den HTTP-Request dranzukommen. Dieser sieht z.B. so aus:
Code:
GET|POST|... dateiname.ext HTTP/1.1
HOST: w[b][/b]ww.deinedomain.com
Connection: close
Der Host identifiziert die Root-Domain. Wie du ueber die Indys da drankommst, weiss ich jetzt aber auch nicht.

Greetz
alcaeus

Ja, an den Request habe ich auch schon gedacht. Leider weiß ich auch nicht wie ich daran komme. Hab schon versucht den Source von tIdHTTPProxyServer umzuschreiben. Klappt alles nicht. Ich bin am verzweifeln. Wieso gibts zu den Indys keine ordentliche Doku?

marabu 3. Okt 2006 13:05

Re: Domainname bzw. IP-Adresse bekommen
 
Hallo Andreas,

Zitat:

Zitat von Andreas L.
Leider weiß ich auch nicht wie ich daran [Host] komme.

liefert dir AHeaders.Values['Host'] im event OnHTTPDocument() nicht das gewünschte Ergebnis?

Zitat:

Zitat von Andreas L.
Wieso gibts zu den Indys keine ordentliche Doku?

Das ist die uralte Geschichte mit dem Maul vom geschenkten Gaul.

Grüße vom marabu

SnuffMaster23 3. Okt 2006 13:11

Re: Domainname bzw. IP-Adresse bekommen
 
Viel einfacher, ARequestInfo.Host im OnCommandGet tuts auch ;)
Bei mir jedenfalls.

Andreas L. 3. Okt 2006 13:14

Re: Domainname bzw. IP-Adresse bekommen
 
Zitat:

Zitat von marabu
Hallo Andreas,

Zitat:

Zitat von Andreas L.
Leider weiß ich auch nicht wie ich daran [Host] komme.

liefert dir AHeaders.Values['Host'] im event OnHTTPDocument() nicht das gewünschte Ergebnis?

Da bekomme ich einen Leerstring. Wenn ich mir alle Headers auflisten lasse steht auch nichts von Host drin.

Andreas L. 3. Okt 2006 13:15

Re: Domainname bzw. IP-Adresse bekommen
 
Zitat:

Zitat von SnuffMaster23
Viel einfacher, ARequestInfo.Host im OnCommandGet tuts auch ;)
Bei mir jedenfalls.

Dieses Ereignis gibts bei mir nicht!

SnuffMaster23 3. Okt 2006 13:22

Re: Domainname bzw. IP-Adresse bekommen
 
Oh sorry, sollte wohl genauer lesen :oops:
Beim TiDHTTPServer gibts das, beim Proxy wohl nicht.

Aber im Header müsste es eigentlich drinstehen.
Ansonsten musst du den Request auslesen den der Proxy weiterleiten soll.

Andreas L. 3. Okt 2006 16:00

Re: Domainname bzw. IP-Adresse bekommen
 
Zitat:

Zitat von SnuffMaster23
Oh sorry, sollte wohl genauer lesen :oops:
Beim TiDHTTPServer gibts das, beim Proxy wohl nicht.

Aber im Header müsste es eigentlich drinstehen.
Ansonsten musst du den Request auslesen den der Proxy weiterleiten soll.


Ist aber nicht im Header. Wie komme ich an den Request ran?

SnuffMaster23 3. Okt 2006 16:09

Re: Domainname bzw. IP-Adresse bekommen
 
Keine Ahnung, hab den Proxy noch nie benutzt.
War auch nur ne Vermutung.

Vielleicht kriegsts über die zugrunde liegende TCP-Verbindung.

alcaeus 3. Okt 2006 16:15

Re: Domainname bzw. IP-Adresse bekommen
 
Zitat:

Zitat von SnuffMaster23
Vielleicht kriegsts über die zugrunde liegende TCP-Verbindung.

Dann aber nur ueber hintenrum und drei Mal um die Ecke, indem die Daten manuell ausgelesen werden. TCP hat keinen Plan von HTTP-Requests ;)

BTW, das und die erste Antwort klingen nicht wirklich ermutigend :-|

Greetz
alcaeus

SnuffMaster23 3. Okt 2006 16:39

Re: Domainname bzw. IP-Adresse bekommen
 
Naja, die TCP-Verbindung weiß ja mit wem sie Verbunden ist, sonst wärs keine Verbindung.
Dazu braucht sie auch nix von HTTP zu wissen.

Ansonsten würd ich sagen, statt TidHTTPProxyServer nen TidHTTPClient und TidHTTPServer nehmen ;)
Dann kriegst alle Infos, kannst Requests filtern, blocken, loggen, cachen...

Andreas L. 3. Okt 2006 16:43

Re: Domainname bzw. IP-Adresse bekommen
 
Aber irgendwo im inneren der Komponente muss ja der Host mal auftauchen. ich habe da die Variable LRemoteHost in IdHTTPProxyServer.pas gefunden. Leider weiß ich nicht wie ich die public machen kann damit ich den Wert von der Komponente bekomme.

Andreas L. 3. Okt 2006 16:44

Re: Domainname bzw. IP-Adresse bekommen
 
Zitat:

Zitat von SnuffMaster23
Naja, die TCP-Verbindung weiß ja mit wem sie Verbunden ist, sonst wärs keine Verbindung.
Dazu braucht sie auch nix von HTTP zu wissen.

Ansonsten würd ich sagen, statt TidHTTPProxyServer nen TidHTTPClient und TidHTTPServer nehmen ;)
Dann kriegst alle Infos, kannst Requests filtern, blocken, loggen, cachen...

Und wie genau muss ich die verwenden? Ich kenne mich mit den Indys eigentlich überhaupt nicht aus.....

SnuffMaster23 3. Okt 2006 16:49

Re: Domainname bzw. IP-Adresse bekommen
 
Naja, der Server kriegt ein Request rein, das lässt du gleich den Client wieder an den eigentlichen Ziel-Server wegschicken.

Wenn der CLient dann ne Antwort kriegt gibt der Server das als Response her.

Aber ich hab mal wieder keine Ahnung ob das geht, ich nehm ja an dass ein Proxy-Request ein getunnelter HTTP-Request ist (hab nix zu dem Thema gefunden).
Den Indy-Client hab ich noch nie benutzt.
Ich tests mal schnell :D

//Edit:
Also bei nem ganz schnellen Versuch krieg ich immer nur ne leere Seite zurück. Aber ich bleib dran!

Delphi-Quellcode:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  AResponseInfo.ContentText := IdHTTP1.Get(ARequestInfo.Host + ARequestInfo.Document);
  AResponseInfo.ContentLength := length(AResponseInfo.ContentText);
  AResponseInfo.WriteHeader;
  AResponseInfo.WriteContent;
end;
//Edit²: ALso wenn man vor ARequestInfo.Host noch 'http://' + anhängt funktionierts für Text oder Bilder allein. Bilder in Seiten werden nicht angezeigt.
Das Problem hatte ich schonmal, das liegt am ContentType.

Danniolo 3. Okt 2006 18:27

Re: Domainname bzw. IP-Adresse bekommen
 
@SnuffMaster23, Edit²: Das Problem hatten wir (Andreas und ich) auch schon einmal. Auf Grund dieser Sache sind wir dann ja auch auf die IdHTTPProxyServer Komponente umgestiegen. Allerdings haben wir jetzt hier dieses dämliche Problem mit der unvollständigen URL.
Naja, hoffen wir mal, dass wir's irgedwann nochmal schaffen^^

SnuffMaster23 3. Okt 2006 20:27

Re: Domainname bzw. IP-Adresse bekommen
 
Ich hab jetzt mal ne "Log"-Funktion eingebaut.
Das mit den Bildern liegt nicht am Content-Type sondern am HTTP-Client!
Wenn ich vor allen anderen Aktionen logge kommen alle Requests an.
Wenn ich logge nachdem der Request weitergegeben wurde kommen Bilder so gut wie nie im Log an.

Das liegt daran dass IdHTTP1.Get Exceptions produziert wenn Bilder Requested werden.

Und jetzt bin ich verwirrt, ich mach wohl morgen weiter :D

Andreas L. 3. Okt 2006 20:46

Re: Domainname bzw. IP-Adresse bekommen
 
Zitat:

Zitat von SnuffMaster23
Ich hab jetzt mal ne "Log"-Funktion eingebaut.
Das mit den Bildern liegt nicht am Content-Type sondern am HTTP-Client!
Wenn ich vor allen anderen Aktionen logge kommen alle Requests an.
Wenn ich logge nachdem der Request weitergegeben wurde kommen Bilder so gut wie nie im Log an.

Das liegt daran dass IdHTTP1.Get Exceptions produziert wenn Bilder Requested werden.

Und jetzt bin ich verwirrt, ich mach wohl morgen weiter :D

Nachdem ich jetzt 12 Stunden mit IdHTTPProxyServer und weiteren 2 Stunden mit deinen Vorschlag gespielt habe geh ich erstmal pennen und hoffe das du ne Problemlösung findest :mrgreen:

Vielen, Vielen Dank ;-)

Gute Nacht

SnuffMaster23 4. Okt 2006 20:20

Re: Domainname bzw. IP-Adresse bekommen
 
Also ich hab jetzt mal die Exceptions mitloggen lassen.
Das einzige was dabei rauskam waren die Socket Errors 1022 und 1038.
Zu allem Überfluss hab ich auch nix dazu gefunden :(

Ich denk da modifizierst du noch einfacher den Indy-Proxy.
Einfach bei den Properties das rein:
Delphi-Quellcode:
private
  function GetRemoteHost: string {??};
public
  property RemoteHost: string {??}; read GetRemoteHost;
Und weiter unten (implementation):
Delphi-Quellcode:
function TIdHTTPProxyServer.GetRemoteHost;
begin
  Result := LRemoteHost;
end;
getippt, nicht getestet ;)
So müsste das funktioniern, wenn nicht muss es dir jemand anders erklären.

Andreas L. 26. Okt 2006 11:03

Re: Domainname bzw. IP-Adresse bekommen
 
Habs jetzt geschafft. Hab in meinen Blog ein Tutorial geschrieben: http://softprose.any-key.de/


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz