|
You last visited: Today at 05:30
Advertisement
[vb.net] ask.fm login
Discussion on [vb.net] ask.fm login within the .NET Languages forum part of the Coders Den category.
01/15/2015, 23:59
|
#1
|
elite*gold: 0
Join Date: Apr 2008
Posts: 31
Received Thanks: 2
|
[vb.net] ask.fm login
Nabend mitteinand,
ich möchte gerne ein paar Werte von ask.fm/account/stream lesen, allerdings scheitert es schon beim Login.
Vorgehen:
- Seite anfordern und authentication_token auslesen
- Logindaten an den Server senden
- ...
Das Problem, denke ich, liegt an den unvollständigen Cookies beim Senden der Logindaten. z.B. _ask.fm_session Cookie?
Danke (:
Hier Code dazu(was sind die richtigen [vb.net]-code Tags?):
PHP Code:
Public Sub login(user As String, pw As String)
//Get response for authentication token
Dim tempcookie As New CookieContainer
Dim request As WebRequest = _
WebRequest.Create("http://ask.fm/")
request.Credentials = CredentialCache.DefaultCredentials
Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
//expect _ask.fm_session cookie here, but there is non cookie returned at all
tempcookie.Add(response.Cookies)
Dim dataStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
Dim starttag As String = "authenticity_token"" type=""hidden"" value="""
Dim endtag As String = "="" />"
Dim t_token As String
Dim user_list As New List(Of String)
Dim postdata As String
//Clean up the streams and the response.
reader.Close()
response.Close()
//Get token stream data
t_token = responseFromServer.Substring(responseFromServer.IndexOf(starttag) + starttag.Length)
auth_token = t_token.Substring(0, t_token.IndexOf(endtag))
//prepare cont for login
Dim encoding As New UTF8Encoding
postdata = "authenticity_token=" & auth_token & _
"%3D&login=" & user & _
"&password=" & pw & _
"&follow=&like=&back=&authenticity_token=" & auth_token & _
"%3D"
Dim bytes() = encoding.GetBytes(postdata)
Dim ask_request As HttpWebRequest = DirectCast(WebRequest.Create("http://ask.fm/session"), HttpWebRequest)
ask_request.Method = "POST"
ask_request.KeepAlive = True
ask_request.CookieContainer = tempcookie
//Set request values
ask_request.Accept = "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01"
ask_request.ContentLength = bytes.Length
ask_request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"
ask_request.Referer = "http://ask.fm/"
ask_request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"
ask_request.Host = "ask.fm"
ask_request.Headers.Add("Accept-Language", "de,en-US;q=0.7,en;q=0.3")
ask_request.Headers.Add("X-Requested-With", "XMLHttpRequest")
//ask_request.Headers.Add("Cookie", "language_id=14; __qca=P0-375437971-1420825693756; inbox_notice=0; rbox_type=2; rbox_toggle=1; mobile_view=false; _ask.fm_session=BAh7CToOcmV0dXJuX3RvIhQvYWNjb3VudC9zdHJlYW06D3Nlc3Npb25faWQiJTcwNDMwN2dWM3ZGIxNfNTM0ZTYd5NzJmNfdE1OhBfY3NyZl90b2tlbiIxL1FdsdfdONG01sdTXFxdFNYYytdsxvdHZCVG5Cdk5ZZGMrbUNYM2ZSND06EG9sZF9nZXRfdXJsIgYv--15031f3050681ed6c4533545a56dce9a94fa092e")
Dim ask_request_stream As Stream = ask_request.GetRequestStream()
ask_request_stream.Write(bytes, 0, bytes.Length)
ask_request_stream.Close()
Dim ask_response As HttpWebResponse = DirectCast(ask_request.GetResponse(), HttpWebResponse)
//The cookies given are different to those usually given when login was successful
tempcookie.Add(ask_response.Cookies)
logincookie = tempcookie
Dim ask_response_reader As New StreamReader(ask_response.GetResponseStream())
Dim ask_response_string As String = ask_response_reader.ReadToEnd()
ask_response_reader.Close()
ask_request_stream.Close()
ask_response.Close()
End Sub
|
|
|
01/16/2015, 14:47
|
#2
|
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
|
Liegts vielleicht daran das du "reader.Close()" und "response.close()" zu früh benutzt?
|
|
|
01/16/2015, 17:26
|
#3
|
elite*gold: 0
Join Date: Apr 2008
Posts: 31
Received Thanks: 2
|
Ist das nicht durch das
sichergestellt?
Habs auch mit
Code:
Threading.Thread.Sleep(1000)
gestestet Ergebnis ist das gleiche.
Das ist der Header der gesendet wird wenn ich mich regulär auf der Seite einlogge.
HTML Code:
Accept text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language de,en-US;q=0.7,en;q=0.3
Content-Length 193
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Cookie language_id=14; __qca=P0-375437971-1420825693756; inbox_notice=0; rbox_type=2; rbox_toggle=2; mobile_view=false; _ask.fm_session=BAh7CDoPc2Vzc2lvbl9pZCIlYmI5ZGJmOTNhODEzNmVjYzg1MTMzYTFjMDhkNTFmNmI6EG9sZF9nZXRfdXJsIsdsdfsdfsdfY3NyZl90b2tlbiIxOHAzMko3TWZnWDg3dmZBYjEwNElSK0x0NVZUYTZ2bWRIRHFoRWgrVUJxUT0%3D--292f0e2108d3ea89bf9ae5b702073495a68e06ac
Host ask.fm
Referer http://ask.fm/
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
X-Requested-With XMLHttpRequest
Hier wird der Cookie "_ask.fm_session" mitgesendet, wo kann ich das auslesen?
|
|
|
01/16/2015, 19:17
|
#4
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by 3x3cuTeR
Hier wird der Cookie "_ask.fm_session" mitgesendet, wo kann ich das auslesen?
|
Darum musst du dich nicht kümmern, setze einen GET Request auf die Hauptseite mit verbundenem CookieContainer ab und logge dich danach über den POST Request (mit dem selben CookieContainer) ein.
Ich denke eher, dass diese ominöse Cookie nur gesetzt wird, wenn du dich erfolgreich eingeloggt hast aber das ist nun nur Spekulation. In der Regel werden gesetzte Cookies im Set-Cookie Header angegeben, du müsstest halt mal alle relevanten Anfragen (und dazu gehören nicht nur die Header) posten damit man eine vernünftige Debugbasis hat.
PS: Wo hast du dir den Code zusammenkopiert? Das tut ja schon in den Augen weh...
PPS: Zensier die Session ID, du weißt anscheinend nicht dass diese jedem den Zugriff auf diesen Account gewähren kann.
|
|
|
01/16/2015, 19:43
|
#5
|
elite*gold: 0
Join Date: Apr 2008
Posts: 31
Received Thanks: 2
|
@PPS: Versuch es.. :P
Ok dann einfach mal Step by Step.
Der Code von oden etwas zusammengefasst:
Cookiecontainer erstellen:
Code:
Dim tempcookie As New CookieContainer
Get request auf die Hauptseite:
Code:
Dim response As HttpWebResponse = DirectCast(WebRequest.Create("http://ask.fm/").GetResponse(), HttpWebResponse)
Antwort erhalten:
Code:
Dim response As HttpWebResponse = DirectCast(WebRequest.Create("http://ask.fm/").GetResponse(), HttpWebResponse)
Cookies des response speichern(es werden keine Cookies zurückgeliefert):
Code:
tempcookie.Add(response.Cookies)
Inhalt des response speichern:
Code:
Dim reader As New StreamReader(response.GetResponseStream())
Dim responseFromServer As String = reader.ReadToEnd()
Der Webinhalt der Ask Startseite ist jetzt nicht so interessant. Außer eben die Zeile/n mit dem Token.
Code:
var AUTH_TOKEN = "Kp9iqVHxJMtsd5nyMfp+jDs7IFUsaqhSasaYDIDr+UMo=
Soweit noch richtig oder?
EDIT:
Was mich auch schon ein ganzes Stück weiterbringen würde:
Wie kann ich das auslesen, was ich tatsächlich mit dem Code sende?
|
|
|
01/16/2015, 22:55
|
#6
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Du musst da keine Cookies hin und her schieben. Wenn der Server Cookies setzt, sind sie automatisch im CookieContainer, das macht .NET selbst.
Deine letzte Frage verstehe ich nicht, meinst du Packet Sniffer und Debugger? Ich würde dir so etwas wie Fiddler empfehlen, der fungiert als Proxy und bekommt alle Anfragen die du sendest (sowie die Antworten darauf). Dort siehst du auch genau, ob der Server deine Anfrage ablehnt oder wie er eben generell darauf reagiert.
|
|
|
01/17/2015, 03:12
|
#7
|
elite*gold: 0
Join Date: Apr 2008
Posts: 31
Received Thanks: 2
|
Ich hab sowas wie Fiddler gemeint. Bisher hab ich immer nur Firebug genutzt, allerdings seh ich da keine Anfragen und Antworten die von Code kommen.
EDIT: Fiddler ist top danke.
Eine Kleinigkeit noch, dann sollte ich erst mal selbst klarkommen.
Hat beim Lesen:
HTML Code:
Count=1
Item(0)={mobile_view=false}
Wenn ich mir alleindings den Header anschaue, dann stehe da noch ein bisschen mehr.
Code:
response.Headers.Item(8)
HTML Code:
"mobile_view=false; path=/,,language_id=14; path=/; expires=Sun, 17-Jan-2016 13:13:12 GMT,,l=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT,_ask.fm_session=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyz; path=/; HttpOnly"
Gibts ne Möglichkeit direkt auf die Daten zuzugreifen oder muss ich den Header parsen?
|
|
|
01/17/2015, 14:58
|
#8
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Habe nichts dazu gefunden. Hätte mich auch etwas gewundert, da hier keine wirkliche Struktur vorliegt. Du hast ja nicht immer Werte nach Key-Value Prinzip und die Delimiter wechseln auch ständig.
Hau einfach ein entsprechendes RegEx pattern rein, dann wirst du die Informationen schnell und geordnet extrahieren können.
|
|
|
All times are GMT +1. The time now is 05:31.
|
|