Avatar billede hulla Novice
27. august 2012 - 12:38 Der er 17 kommentarer og
1 løsning

Log ind på site programmatisk

Hej

Jeg skal crawle et site efter aftale med ejeren.
Dvs. jeg har både brugernavn og password til sitet, og de informationer jeg skal crawle er beskyttet af disse credentials.

Hvordan kan jeg bygge en WebClient der sender (poster?) de rigtige data, så crawleren bliver "logget ind"?

Hvis du har en god ide, vil jeg gerne sende link til sitet på mail.

Mvh Hulla
Avatar billede jokkejensen Novice
27. august 2012 - 12:50 #1
Du poster bare til login formen, brug ex WebRequest()

Har du et link til formularen, eller kan du kopiere markuppen herind ?

/J
Avatar billede softspot Forsker
27. august 2012 - 12:55 #2
Du skal gemme cookies fra dit loginpost og så medsende dem ifm. alle de forspørgsler du laver ifm. dit login. Start evt. her:

http://stackoverflow.com/questions/2457771/http-web-request-doesnt-maintaining-session
Avatar billede Panen Nybegynder
27. august 2012 - 12:55 #3
Her skal du kigge på HttpWebRequest klassen.

Med den kan du sende en GET eller POST request med tilhørende username og password til din hjemmesides loginscript.

Derefter kan du gemme dine session-informationer i en CookieContainer som også findes i .NET.
Når du efterfølgende laver requests til hjemmesiden og sender din CookieContainer med, vil du fremstå som indlogget :)
Avatar billede hulla Novice
27. august 2012 - 12:56 #4
Det er ikke sådan at jeg kan få dig til at sende din mail-adresse, så kan jeg sende alle oplysninger der?
Avatar billede hulla Novice
27. august 2012 - 13:19 #5
@jokkejensen:

Har snakket med ejeren, og det er ok jeg poster url'en her:
http://stm-sport.dk/forside/
Når du trykker på Login der, så fremkommer der en javascript boks med brugernavn- og passwordfelter.

Ved ikke helt om den url, er den der så skal postes til?
Avatar billede Panen Nybegynder
27. august 2012 - 13:37 #6
Det er faktisk denne URL du skal poste til:
http://stm-sport.dk/a/p=privacy/f=login

Der bliver brugt Ajax, gemt langt væk i et rod af plugins og scripts, derfor var det lidt problematisk lige at gennemskue :b
Avatar billede jokkejensen Novice
27. august 2012 - 13:50 #7
string data = "username=<value>&password=<value>"; //replace <value>
byte[] dataStream = Encoding.UTF8.GetBytes(data);
private string urlPath = "http://stm-sport.dk/a/p=privacy/f=login";
WebRequest webRequest = WebRequest.Create(urlPath);
webRequest.Method = "POST";
webRequest.ContentLength = dataStream.Length; 
Stream newStream=webRequest.GetRequestStream();
// Send the data.
newStream.Write(dataStream,0,dataStream.Length);
newStream.Close();
WebResponse webResponse = webRequest.GetResponse();

Du får så et json object tilbage, men session/cookie skulle være sat fra server.

/J
Avatar billede Panen Nybegynder
27. august 2012 - 14:01 #8
#7 Sender WebRequest automatisk SessionID med da? Serveren kan jo ikke selv identificere en session.
Avatar billede hulla Novice
27. august 2012 - 14:01 #9
@jokkejensen:

Hmm, umiddelbart ser det ikke ud til den får sat det der skal til. Jeg kan i hvert fald ikke få andet frem end den uindloggede side.
Nogen ide?
Avatar billede Panen Nybegynder
27. august 2012 - 14:07 #10
@hulla Efter min erfaring skal man selv holde styr på session-cookie med en CookieContainer som jeg skrev tidligere :)
Avatar billede hulla Novice
27. august 2012 - 14:29 #11
Tjaa, nu har jeg prøvet lidt forskelligt, også med HttpWebRequest i stedet for WebRequest og med udfyldelse af CookieContainer som jeg sender med i efterfølgende requests, men den vil ikke det den skal :-)

Flere ideer? jeg er sikker på det hele i skriver er korrekt, men måske er det den specielle måde de logger ind på her der gør det tricky?
Avatar billede Panen Nybegynder
27. august 2012 - 14:38 #12
Dine post-data skal hedde email og password istedet for username og password, kan jeg se i javascriptet på hjemmesiden. Prøv med det :)
Avatar billede hulla Novice
27. august 2012 - 14:45 #13
Giver desværre samme resultat Panen.
Avatar billede Panen Nybegynder
27. august 2012 - 14:48 #14
Ellers prøv at tage det fra en ende af.

Når du requester login-siden. Hvad får du så af response?

Får du dette?
{"error":"incorrect email or password"}

Eller får du dette noget lignende?
{"redirect_url":"en eller anden url"}

Hvis du ikke får noget tilbage virker din request ikke.
Avatar billede hulla Novice
27. august 2012 - 14:53 #15
Jeg får et WebResponse, med en masse indhold. Bl.a. får jeg response header der fortæller om cookies osv osv.
Hvor ser jeg selve response body?
Avatar billede Panen Nybegynder
27. august 2012 - 15:11 #16
Hvis du laver et nyt C# projekt, indsætter en textedit, en button og en richtextedit er her koden til at requeste din hjemmeside med CookieContainer.

http://pastebin.com/E8kkhhPS

Du skal bare smide email og password ind i koden, og når du requester siden skal du skrive hele adressen i tekstboksen inkl. http://
Avatar billede hulla Novice
27. august 2012 - 19:54 #17
Så lykkes det!
Jeg endte med at bruge HttpWebRequest.

Vil Panen og jokkejensen smide et svar, så deler jeg pointene imellem Jer. Jeg brugte vist lidt fra hver.
Avatar billede Panen Nybegynder
29. august 2012 - 08:53 #18
Svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester