HTTP: Cookies setzen

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

Badudel

Betreff: HTTP: Cookies setzen

BeitragDi, Jan 18, 2011 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits,

ich beschäftige mich grade mit HTTP. Derzeit möchte ich mich zum Test in das Blitzforum einloggen.
Per POST sende ich meinen Namen und Passwort (und einen Referer - den hab ich mir im Firefox abgeschaut), speichere die beiden Cookies, die ich notieren soll, und lade die Seite erneut - diesmal mit den beiden.
Leider bekomme ich keinen eingeloggten Zustand hin.
Hier ist meine GET-Anfrage mit Cookies:
Code: [AUSKLAPPEN]
GET /index.php HTTP/1.1
Host: www.blitzforum.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: chunked
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: www.blitzforum.de/
Cookie: blitzforum_data=[i]entfernt[/i]
Cookie: blitzforum_sid=[i]entfernt[/i]
X-Behavioral-Ad-Opt-Out: 1
X-Do-Not-Track: 1
Cache-Control: max-age=0

Keine Ahnung, ob die beiden Cookies zum Einloggen reichen, zur Sicherheit habe ich sie mal rausgenommen. Sie sind aber richtig!
Was mach ich falsch? Ich bekomme immer wieder eine Seite, in der ich nicht eingeloggt bin. Der Server fordert mich auch auf, die beiden Cookies mit neuem Inhalt zu füllen.

Freue mich über eine Antwort. Viele Grüße,
Badudel

ZaP

BeitragDi, Jan 18, 2011 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Also die Cookies müssen auf jeden Fall richtig URL-codiert sein.
Starfare: Worklog, Website (download)

Badudel

BeitragDi, Jan 18, 2011 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist genau das selbe Format, wie ich es bekomme.
Ein Ausschnitt:
...autologinid%22%3Bs%3A0%3A%2...

Das, was der Server schickt, ist doch auch URL-Codiert, oder?
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik!
 

Schnuff

BeitragMi, Jan 19, 2011 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Cookies werden wie folgt "übergeben":
Code: [AUSKLAPPEN]
GET  /index.php HTTP/1.1
Host: www.blitzforum.de
Cookie: blitzforum_data=...; blitzforum_sid=...


(Mit Semikolon und Leerzeichen getrennt, hinter dem letzten Cookie steht kein Semikolon.)

...und ja, die vom Server empfangenen Cookies sind schon URL-Encoded.
Programmers dont die. They gosub without return...

Badudel

BeitragDo, Jan 20, 2011 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

danke für deine Info. Leider funktioniert es immer noch nicht.
Ich habe einen möglichst kleinen Code gemacht, mit dem ich derzeit arbeite.
Er ruft lädt dabei den HTML-Code runter, um es danach in einem HTML-View anzuzeigen.
Man beachte, dass die Verbinde-Funktion als letzten optionalen Parameter die Möglichkeit bietet, die Header direkt in eine Datei umzuleiten (wenn Paramter=true wird das Ganze in die Datei "OUT.TXT" umgeleitet).

BlitzMax: [AUSKLAPPEN]
Import MaxGui.Drivers
SuperStrict


Global name$="", passwort$=""

If Not name Notify("Bitte im Quelltext Logindaten eintragen",1);End

Global host$="www.blitzforum.de", url$="/", cookie$

Local post$="redirect=..%2F&username="+name+"&password="+passwort+"&login="'Hier sind die POST-Daten,
'aus Firefox abgeschaut



'-------------------Unwichtiger Kram------------------------------------------
Global timer:TTImer=CreateTimer(20)
Local window:TGadget
Local htmlview:TGadget,ln$
window=CreateWindow("Brauser",30,20,600,440,,15|WINDOW_ACCEPTFILES)
htmlview=CreateHTMLView(0,0,ClientWidth(window),ClientHeight(window),window)
SetGadgetLayout htmlview,1,1,1,1
Global tcp:tSocket
Local stream:TStream
Global size%
'-----------------------------------------------------------------------------


stream=Verbinde(stream,host)'Stellt eine Verbindung her. Einen Parameter mit 1 hinten anhängen,
'um Headers nach "OUT.TXT" umzuleiten
SendHeaders(stream,"index.php","POST",post)
ShowSite(stream,htmlview)

sleep(1)

stream=Verbinde(stream,host)
SendHeaders(stream,"index.php","GET")
ShowSite(stream,htmlview)

sleep(1)


While WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
End
End Select

Wend

Function Verbinde:TStream(stream:TStream,url$,file%=0)
If stream Then CloseStream(stream)
If tcp Then CloseSocket(tcp)
If file Then Return (OpenFile("OUT.TXT"))

tcp=CreateTCPSocket()
tcp.Connect(HostIp(url),80)
If Not tcp Notify "Kann nicht verbinden!"
stream= CreateSocketStream(tcp)
Return stream
End Function



Function SendHeaders(stream:TStream,file$,met$,post$="")'met ist entweder POST oder GET, post ist
'der Inhalt bei der POST-Methodes
stream.WriteLine(met+" "+url+file+" HTTP/1.1")
stream.WriteLine("Host: "+host)
stream.WriteLine("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2)"+..
" Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)")
stream.WriteLine("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
stream.WriteLine("Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3")
stream.WriteLine("Accept-Encoding: chunked")
stream.WriteLine("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7")
stream.WriteLine("Keep-Alive: 115")
stream.WriteLine("Connection: keep-alive")
stream.WriteLine("Referer: "+host+url)

If cookie Then WriteLine(stream,"Cookie: "+cookie); Print "COOKIE GESENDET: "+cookie

stream.WriteLine("X-Behavioral-Ad-Opt-Out: 1")
stream.WriteLine("X-Do-Not-Track: 1")
stream.WriteLine("Cache-Control: max-age=0")
If met="POST"
stream.WriteLine("Content-Type: application/x-www-form-urlencoded")
stream.WriteLine("Content-Length: "+Len(post))
stream.WriteLine("")
stream.WriteLine(post)
ElseIf met="GET"
stream.WriteLine("")
EndIf
End Function


Function GetAnswer$(stream:TStream)
Local first%=1,ln$
size=0

While Not Eof(stream)
ln=ReadLine(stream)
If ln=""
If first
Notify("Der Server hat nicht geantwortet!",1)
End
Else
Exit
EndIf
ElseIf Left(ln,15)="Content-Length:"
Print ln
size=Int(Mid(ln,17))
ElseIf Left(ln,11)="Set-Cookie:"
Print ln+"[SAVED]"
Local anf%,ende%
anf=Instr(ln," ")+1
ende=Instr(ln,";",anf)
If Not cookie
cookie = Mid(ln,anf,ende-anf)
Else
cookie:+"; "+Mid(ln,anf,ende-anf)
EndIf
Else
Print ln
EndIf
first=0
Wend


If size=0'Chunked Encoding. Für das Problem uninterressant
Local bytes:Byte[]
size=1
While size
Local tst$=ReadLine(stream)
If tst="" Then tst$=ReadLine(stream)
size=HexToInt(tst)
bytes=New Byte[size]
If size
stream.ReadBytes(bytes, size)
ln:+String.FromBytes(bytes, size)
EndIf
Wend

Else'Normaler Transfer


Local bytes:Byte[]

bytes = New Byte [size]
stream.ReadBytes(bytes, size)
ln = String.FromBytes(bytes, size)

EndIf
Return ln
End Function


Function ShowSite(stream:TStream,view:TGadget)
Local fout:TStream = WriteFile("tmp.htm"),ln$

ln=GetAnswer(stream)

WriteLine (fout,ln)
CloseFile fout

HtmlViewGo view,"file://"+CurrentDir()+"/tmp.htm"
End Function


Function sleep(sek%)
Local i%
For i=0 To 20*sek
If PollEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
End
End Select
EndIf
WaitTimer timer
Next
End Function

Function HexToInt%(Hexzahl$)
Local i%,tmp1$,tmp2$,Integer_Result%
If Left$(Hexzahl$,1)="$" Then Hexzahl$=Mid$(Hexzahl$,2)
For i=1 To Len(Hexzahl$)
tmp1$=Upper$(Mid$(Hexzahl$,i,1));tmp2=tmp1$
If Int(tmp2)=0 And tmp1$<>"0" tmp2=Asc(tmp1$)-55
Integer_Result=Integer_Result*16;Integer_Result=Integer_Result+Int(tmp2)
Next
Return Integer_Result
End Function



Wichtig sind eigentlich nur die Funktionen SendHeaders und GetAnswer. Der Rest ist nur, damit ihr den Code testen könnt, ihr könnt das Meiste getrost ignorieren.

Ich freue mich riesig über jede Hilfe!
Viele Grüße,
Badudel
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik!

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group