Seite 1 von 1

Client Bot - HTTP GET POST

Verfasst: 08.03.2005 20:27
von OptimusPrime
Hallo,
ich möchte einen Client-Bot schreiben, eine Art "Sniper",
das Programm stellt Verbindung mit einem Web-Server her,
sendet dann Login-Daten für den Account, empfängt daraufhin die Daten des Servers (HTTP Header + Webseitencode HTML),
diese sollen in einem STRING gespeichert werden, da die HTML Inhalte ausgewertet werden müssen (Links, Daten etc..) um automatisiert Aktionen durchzuführen.
(Die ankommenden Daten sollen sozusagen lokal zwischengespeichert werden)

Das HTTP Protokoll ist mir klar, da ich genügend Mitschnitte mit meinem Achilles ausgewertet habe.

POST und GET ist im Endeffekt das ganze Prinzip :

- Als erstes stelle Ich eine Connection zum Host her :
OpenNetworkConnection(...)
- Nun sende Ich einen POST mit dem relevanten HTTP Headern
SendNetworkString(...)

Wie aber geht es jetzt weiter ?
1. Schliesse ich jetzt die Verbindung ? (HTTP 1.0)
(wahrscheinlich ja ..)
2. Wie fange ich die Ankommenden Daten nun ab, wie lasse ich das Programm am Port 80 lauschen, wie weiss es, das was, was dort ankommt, für ihn ist (immerhin läuft der Browser auch auf Port 80 und der ist ja auch oft aktiv) , klar, ConnectionID, aber bei HTTP 1.0 wird doch nach jedem senden die Verbindung geschlossen, oder habe ich das falsch verstanden ?

Ich weiss, dass ist alles etwas noobig, aber da nichts wirklich zusammenhängendes zu diesem Thema bisher zu finden war, denke ich, das ist für eine Menge Leute ganz Interessant und man kann wirklich Lustige Dinge mit einem Web-Bot machen, der 24h am Tag online ist ;o)

Ich bin für alles Dankbar:
theoretische Ansätze, Code Schnipsel, Links, etc..,

Ich bedanke mich jedenfalls schon Vielmals bei den netten Menschen hier,

M.F.G.
Stephan !


PS.: Ja. es gibt schon eine Menge Webbots, die man anpassen kann und die eine Menge Dinge erledigen können, ich brauche aber spezielle, die
unheimlich komplexe Aufgaben auf den Web-Servern ausführen sollen, dass ist einem Standard-Bot niemals beizubringen, da die KI jeder Webseite einzeln angepasst werden muss.

Verfasst: 09.03.2005 01:15
von Laurin
Ich habe mich vor einiger Zeit auch mit dem HTTP-Protokol beschäftigt (erfolgreich).

Das Ganze läuft ungefähr so ab:
1. Verbindung zum Server aufbauen (OpenNetworkConnection)
2. POST senden (SendNetworkString)
3. und dann auf Antwort warten (NetWorkClientEvent, ReceiveNetworkData)
4. der Server schließt dann automatisch die Verbindung
5. Fertig.

Bei HTTP wird die Verbindung erst geschloßen, wenn der Server seine Antwort (in Form von Headern und eventuell auch HTML, Bilder oder sonstwas im Schlepptau) gesendet hat. Das macht der Server aber selbstständig, du brauchst da nix tun.

Ich gucke mal nach den Code, wo ich HTTP verwendet habe...

Greetz Laurin

Edit:
Der Code:

Code: Alles auswählen

; Web$ - Adresse des Webservers
; GetServerName() - Hab ich mir selber gebaut, ermittelt den Server aus einer Webadresse. Beispiel: "www.bla.de" = GetServerName("www.bla.de/index.html")
; GetURLPath() - Auch selber geproggt. Das macht es: "/index.html" = GetURLPath("www.bla.de/index.html")
Procedure HTTPRequest(Web$)
  
  ; Verbindung zum Server auf Port 80 (HTTP-Port) aufbauen
  ServerID=OpenNetworkConnection(GetServerName(Web$),80)
  
  If ServerID
    
    ; Der HTTP 1.0 GET Header
    SendNetworkString(ServerID,"GET "+GetURLPath(Web$)+" HTTP/1.0"+#CRLF$)
    SendNetworkString(ServerID,"User-Agent: PB/3.93"+#CRLF$)
    SendNetworkString(ServerID,#CRLF$)
    Debug "Send Request. "+"GET "+GetURLPath(Web$)+" HTTP/1.0"
    
    ; Speicher, wo die Nachrichten vom Server reinkommen
    mem=AllocateMemory(10240)
    Debug "Memory allocated."
    
    Repeat
      ; Wenn Daten vom Server kommen, alles gleich in den Puffer damit.
      If ReceiveNetworkData(ServerID,mem,10240)
        dat$=PeekS(mem)
        
        ; Angekommende Daten im Debug-Fenster ausgeben.
        Debug "Received Data: "+dat$
        Debug #CRLF$
        
        ; Da der Server nach dem Daten-senden die Verbindung eh schließt,
        ; räumen wir etwas auf und schließen unsererseits die Verbindung ebenfalls.
        CloseNetworkConnection(ServerID)
        Break
      EndIf
    ForEver
    
  EndIf
EndProcedure
GetWebAdess() und GetURLPath() musst du dir selber proggen, dürfte nicht so schwer sein. Kannst aber auch weglassen und stattdessen die Zieladresse reinschreiben. Der Rest dürfte klar sein.

Greetz Laurin

Riesen Dank !!!

Verfasst: 09.03.2005 01:34
von OptimusPrime
Das ist genau das, was ich gebraucht habe,
schon das theoretische am Anfang wäre es gewesen,
aber dazu noch ein Skript...

Super !!!

Vielen Dank,

mfg
Stephan

Verfasst: 09.03.2005 01:45
von Laurin
Np.

Vergiss das InitNetwork am Anfang nicht.

Greetz Laurin