HTTP- Probleme...

Anfängerfragen zum Programmieren mit PureBasic.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

HTTP- Probleme...

Beitrag 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
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: HTTP- Probleme...

Beitrag von Kiffi »

@LifeSux: CrossPostingSux :|
a²+b²=mc²
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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"
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag 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?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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...
a²+b²=mc²
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag von LifeSux »

Nagut. Da muss ich wohl oder übel zustimmen. Ich werde es in Zukunft vermeiden. :)
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

@edel
man wächst an seinen Aufgaben.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag 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!
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag 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.
Antworten