Seite 1 von 2

HTTP- Probleme...

Verfasst: 05.10.2008 13:19
von LifeSux
Hallo an Alle! :)
Ich hoffe ihr könnt mir bei einem kleinen Problem helfen welches ich habe. Ich möchte mich gerne auf einer Website einloggen und hab leider keine Ahnung wie ich das machen soll. Ich habem ich vorher nie viel mit HTML / PHP etc. auseinander gesetzt. Zu Testzwecken habe ich einen Login eingerichtet, der einfach nur Daten annimmt und einen dann weiterleitet. Ich hoffe ihr könnt mir helfen.

Quellcode zum Login
Login als HTML
Login als PHP

Mein Kumpel möchte das hinterher gerne auch auf seinem Linux laufen lassen, deshalb muss es auch noch plattformunabhängig sein. Ich hoffe ihr könnt mir helfen. Bei der Forensuche habe ich einiges gefunden, doch vieles war veraltet oder nur für den IE. Ich bin mir noch nichtmal sicher ob man es lieber per POST oder GET machen sollte.... vielen Dank schonmal.

//EDIT
Geplant ist ein Programm, welches sich ganz simpel automatisch auf einer Website einloggt und hinterher per Webgadget alles anzeigt.... mfg

Verfasst: 05.10.2008 14:43
von Deluxe0321

Code: Alles auswählen

;by Darkdragon
#TIMEOUT=1500

InitNetwork()

Procedure.s ReceiveLine(ConnectionID)
  Text.s = ""
  While char.b <> #LF
    char = 0
    ReceiveNetworkData(ConnectionID, @char, 1)
    If char <> 0
      Text.s + Chr(char)
    EndIf
  Wend
 
  ProcedureReturn RemoveString(RemoveString(Text, #CR$), #LF$)
EndProcedure 

Procedure HTTPRequest(URL.s, *EndSize.LONG, PacketSize, *Callback)
  Protected Size.l, Data_.s, s.l, Method.s, File.s, Content.s, Text.s, Length.l, Line.s
  Protected CurSize.l, oSize.l, t.l, ConnectionID.l
 
  If Left(URL, 7) = "http://" : URL = Right(URL, Len(URL)-7) : EndIf
  s = FindString(URL, "/", 1)
  Host.s = "" : File.s = ""
  If s <> 0 : Host.s = Left(URL, s-1) : File.s = Right(URL, Len(URL)-s) : Else : Host = URL : EndIf
 
  s = FindString(File, "?", 1)
  If s <> 0
    Method.s = "POST"
    Content.s = Right(File, Len(File)-s)
    File = Left(File, s-1)
  Else
    Method.s = "GET"
    Content.s = ""
  EndIf
 
  ConnectionID = OpenNetworkConnection(Host, 80)
  If ConnectionID
    Data_.s = Method+" /"+File+" HTTP/1.1"+#CRLF$
    Data_.s + "Host: "+Host+#CRLF$
    Data_.s + "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"+#CRLF$ 
    If Content <> ""
      Data_.s + "Connection: close"+#CRLF$
      Data_.s + "Content-Type: application/x-www-form-urlencoded"+#CRLF$
      Data_.s + "Content-Length: "+Str(Len(Content))+#CRLF$
      Data_.s + #CRLF$ + Content.s + #CRLF$+#CRLF$
    Else
      Data_.s + "Connection: close"+#CRLF$+#CRLF$
    EndIf
   
    SendNetworkString(ConnectionID, Data_)
    While NetworkClientEvent(ConnectionID) <> 2 : Delay(10) : Wend
   
    Length = 0
    Line.s = ""
    Repeat
      Line = ReceiveLine(ConnectionID)
      Debug Line.s
      Select LCase(StringField(Line, 1, ":"))
        Case "content-length"
         
          Length = Val(Trim(StringField(Line, 2, ":")))
      EndSelect
    Until Len(Trim(Line)) <= 4
   
    Size = 0
    If Length <> 0
     
      *Result = AllocateMemory(Length)
     
      While Size < Length     
        If CurSize > 0
          Size + CurSize
          If *Callback
            CallFunctionFast(*Callback, Size, Length)
          EndIf
        EndIf
        If Size > (Length-PacketSize)
          PacketSize = Length-Size
        EndIf
        If PacketSize > 0
          CurSize = ReceiveNetworkData(ConnectionID, *Result+Size, PacketSize)
        EndIf
      Wend
     FLENGHT.l=Length.l
    Else
     
      *Buffer = AllocateMemory(PacketSize)
      *Result = AllocateMemory(1)
      t = ElapsedMilliseconds()
      While ElapsedMilliseconds()-t <= #TIMEOUT
        If NetworkClientEvent(ConnectionID) = 2
          CurSize = ReceiveNetworkData(ConnectionID, *Buffer, PacketSize)
          If CurSize > 0
            oSize = Size
            Size + CurSize
            *Result = ReAllocateMemory(*Result, Size)
            CopyMemory(*Buffer, *Result+oSize, CurSize)
            If *Callback
              CallFunctionFast(*Callback, Size, 0)
            EndIf
          EndIf
          t = ElapsedMilliseconds()
        EndIf
      Wend
      Length = Size
     
    EndIf
   
    *EndSize\l = Length
    If *Callback
      CallFunctionFast(*Callback, Size, Length)
    EndIf
   
    CloseNetworkConnection(ConnectionID)
   
    ProcedureReturn *Result
  EndIf
EndProcedure 

URL.s      = "http://polarwolf.eu/Login.php"
email.s    = "test@test.de"
password.s = "test"

*mem=HTTPRequest(URL.s+"?email="+Email.s+"&password="+password.s+"&login=Einloggen", @Size, 16, 0) 
If *mem
  RecivedHTML.s=PeekS(*mem, Size)
  Debug RecivedHTML.s
EndIf  
versuch nächstes mal bitte die boardsuche zu verwenden..
Gruß Marv

Re: HTTP- Probleme...

Verfasst: 05.10.2008 14:55
von Kiffi
@LifeSux: CrossPostingSux :|

Verfasst: 05.10.2008 14:58
von edel
Selbst wenn, der Code ist ueberhaupt nichts fuer Anfaenger. Zumindest
wuerde es mich nicht wundern wenn der naechste Thread von LifeSux
heisst: "Hilfe, mein Programm verbraucht zuviel Speicher"

Verfasst: 05.10.2008 15:13
von LifeSux
Was spricht gegen CrossPosting? Es gibt bestimmt auch viele kluge Köpfe im englischen Forum, welche nicht deutsch sprechen. Weshalb also nicht alle Möglichkeiten nutzen?

Verfasst: 05.10.2008 15:39
von Kiffi
LifeSux hat geschrieben:Was spricht gegen CrossPosting?
Wikipedia hat geschrieben:[...] Ähnlich wie Multipostings im Usenet sind Crosspostings in Webforen nicht
gerne gesehen, da die einzelnen Threads unabhängige Diskussionen
darstellen und im Allgemeinen kein Informationsaustausch zwischen ihnen
stattfindet. Wurde z.B. im einen Thread schon eine Lösung für das
Problem gefunden oder ein entscheidender Hinweis gegeben und im anderen
Forum weiß niemand davon, wird dort u.U. immer noch weiter gerätselt. [...]
mehr gibt's dazu wohl nicht zu sagen...

Verfasst: 05.10.2008 15:41
von LifeSux
Nagut. Da muss ich wohl oder übel zustimmen. Ich werde es in Zukunft vermeiden. :)

Verfasst: 05.10.2008 16:25
von Deluxe0321
@edel
man wächst an seinen Aufgaben.

Verfasst: 05.10.2008 19:45
von LifeSux
Ich habe mir den Code nun einige Zeit angeschaut und muss zugeben... ich verstehe nicht viel davon. Ich hätte nicht gedacht, dass es so schwer ist.

Code: Alles auswählen

HTTP/1.1 200 OK
Date: Sun, 05 Oct 2008 17:44:16 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.2.6
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

1d1
<form action="TEST" method="post" id="Login">
        <fieldset>
            <label for="Login_email">E-Mail</label><br/>
            <input type="text" value="" id="Login_email" name="email" class="fieldText" /><br/>
            <label for="Login_password">Passwort</label><br/>
            <input type="password" value="" id="Login_password" name="password" /><br/>
            <input type="submit" value="Einloggen" name="login"/>
        </fieldset>
    </form>
0

Das gibt der Debugger raus, wenn ich das Programm starte. Leider... verstehe ich nicht, wie mir das helfen soll. :( Aber danke schonmal für die Hilfe!

Verfasst: 05.10.2008 20:54
von Deluxe0321
HTTP/1.1 200 OK
Date: Sun, 05 Oct 2008 17:44:16 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.2.6
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
Dieser Teil ist der Informelle Teil für den Browser --> Was für ein Server, welcher verbindungstyp usw.; für dich aber ersteinmal uninteressant.
1d1
<form action="TEST" method="post" id="Login">
<fieldset>
<label for="Login_email">E-Mail</label><br/>
<input type="text" value="" id="Login_email" name="email" class="fieldText" /><br/>
<label for="Login_password">Passwort</label><br/>
<input type="password" value="" id="Login_password" name="password" /><br/>
<input type="submit" value="Einloggen" name="login"/>
</fieldset>
</form>
0
Das ist der eigentliche HTML Code den dein Server dir zurücksendet. Je nach dem ob du das eigentliche "Login" (PHP Code muss geschrieben & action="TEST" angepasst werden) schon eingebaut hast, und die Daten stimmen, wird dein Script auf dem Server dir das zurückgeben was du möchtest.