Oprettet man. d. 27. august 2012 kl. 12:38:22

hulla
hulla (15.158 point. Point ude: 180)
www.friliv.dk

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

Skrevet man. d. 27. august 2012 kl. 12:50:56| #1

jokkejensen
jokkejensen (40.259 point)
Du poster bare til login formen, brug ex WebRequest()

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

/J

Skrevet man. d. 27. august 2012 kl. 12:55:34| #2

softspot
softspot (106.624 point)
blog.softspot.dk
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/ (...)

Skrevet man. d. 27. august 2012 kl. 12:55:46| #3

Panen
Panen (3.685 point)
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 :)

Skrevet man. d. 27. august 2012 kl. 12:56:12| #4

hulla
hulla (15.158 point)
www.friliv.dk
Det er ikke sådan at jeg kan få dig til at sende din mail-adresse, så kan jeg sende alle oplysninger der?

Skrevet man. d. 27. august 2012 kl. 13:19:43| #5

hulla
hulla (15.158 point)
www.friliv.dk
@jokkejensen:

Har snakket med ejeren, og det er ok jeg poster url'en her:
http://stm-sport.dk/ (...)
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?

Skrevet man. d. 27. august 2012 kl. 13:37:07| #6

Panen
Panen (3.685 point)
Det er faktisk denne URL du skal poste til:
http://stm-sport.dk/ (...)

Der bliver brugt Ajax, gemt langt væk i et rod af plugins og scripts, derfor var det lidt problematisk lige at gennemskue :b

Skrevet man. d. 27. august 2012 kl. 13:50:58| #7

jokkejensen
jokkejensen (40.259 point)
string data = "username=<value>&password=<value>"; //replace <value>
byte[] dataStream = Encoding.UTF8.GetBytes(data);
private string urlPath = "http://stm-sport.dk/ (...)
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

Skrevet man. d. 27. august 2012 kl. 14:01:41| #8

Panen
Panen (3.685 point)
#7 Sender WebRequest automatisk SessionID med da? Serveren kan jo ikke selv identificere en session.

Skrevet man. d. 27. august 2012 kl. 14:01:47| #9

hulla
hulla (15.158 point)
www.friliv.dk
@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?

Skrevet man. d. 27. august 2012 kl. 14:07:23| #10

Panen
Panen (3.685 point)
@hulla Efter min erfaring skal man selv holde styr på session-cookie med en CookieContainer som jeg skrev tidligere :)

Skrevet man. d. 27. august 2012 kl. 14:29:55| #11

hulla
hulla (15.158 point)
www.friliv.dk
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?

Skrevet man. d. 27. august 2012 kl. 14:38:40| #12

Panen
Panen (3.685 point)
Dine post-data skal hedde email og password istedet for username og password, kan jeg se i javascriptet på hjemmesiden. Prøv med det :)

Skrevet man. d. 27. august 2012 kl. 14:45:29| #13

hulla
hulla (15.158 point)
www.friliv.dk
Giver desværre samme resultat Panen.

Skrevet man. d. 27. august 2012 kl. 14:48:19| #14

Panen
Panen (3.685 point)
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.

Skrevet man. d. 27. august 2012 kl. 14:53:40| #15

hulla
hulla (15.158 point)
www.friliv.dk
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?

Skrevet man. d. 27. august 2012 kl. 15:11:06| #16

Panen
Panen (3.685 point)
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/ (...)

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://

Skrevet man. d. 27. august 2012 kl. 19:54:33| #17

hulla
hulla (15.158 point)
www.friliv.dk
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.

Skrevet ons. d. 29. august 2012 kl. 08:53:06| #18


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

C# Exception handling

Oprettet den 14. juni 2013 kl. 08.32
shako giver 60 point for svar | Giv et svar »

Login i ASP.NET

Oprettet den 12. juni 2013 kl. 13.54
bdef giver 30 point for svar | Giv et svar »

Array som property i Visual Studio

Oprettet den 12. juni 2013 kl. 13.21
HPCISCO giver 150 point for svar | Giv et svar »







IT Kurser
Samarbejdspartnere

Udgiver · © 2013 Computerworld A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger