Avatar billede SkarpC Nybegynder
15. november 2013 - 21:53 Der er 7 kommentarer og
1 løsning

C# simulering af at logge ind på hjemmeside

Hej,
Jeg forsøger at logge ind på en hjemmeside med WebRequest/WebClient, men svaret jeg får fra siden er at jeg mangler at udfylde brugernavn og kodeords felterne.

Når jeg med går ind og læser browserens POST besked så anvender den en bestem url med Username og Password som parametre. Jeg sætter WebRequest op til at gøre det samme men får ovennævnte fejl.

Jeg har prøvet på mange forskellige måder, men intet virker. Jeg tror det kan have noget at gøre med at der ikke er understøttelse for Javascript eller at jeg simpelthen ikke indledningsvis har det indledende GET kald som generer noget cookie data som så sendes med ved POST.
Avatar billede Syska Mester
15. november 2013 - 22:15 #1
Drejer det sig om en hjemmeside du må dele med om verden eller er den privat?

Har du husket at tage cookies med over fra dig Response til dit nye Request?

Hvordan udfylder du username/password når du laver dit post?

Hvad Response får du når du prøver at logge ind?

Hvordan ser koden ud du bruger?
Avatar billede SkarpC Nybegynder
16. november 2013 - 21:00 #2
Hjemmesiden det drejer sig om er som sådan ikke hemmelig, jeg er dog i tvivl om hvorvidt det er tilladt at gøre..
Det drejer sig om jobnet.dk, her skal man mindst en gang om ugen logge ind og vise at man er aktivt søgende.
Baggrunden for mit projekt er dog ikke at snyde med dette system. Grunden til at jeg ønsker at en maskine skal logge ind og udføre dette, er at når arbejdsgivere eller job centret søger i deres databaser, så er det sorteret efter seneste registrering.
Altså er det den der sidst har trykket sig som aktivt søgende der ligger øverst i systemet.

Jeg har prøvet med:

using (WebClient client = new WebClient())
            {
                NameValueCollection reqparam = new NameValueCollection();
                reqparam.Add("Username", Username);
                reqparam.Add("Password", Password);

                byte[] responsebytes = client.UploadValues(URL, "POST", reqparam);
                responsebody = Encoding.UTF8.GetString(responsebytes);
            }


og


            WebRequest req = WebRequest.Create(URL);

            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "POST";
            byte[] bytes = Encoding.ASCII.GetBytes(String.Format("Username={0}&Password={1}", Username, Password));
            req.ContentLength = bytes.Length;
            System.IO.Stream os = req.GetRequestStream();
            os.Write(bytes, 0, bytes.Length);
            os.Close();
            WebResponse resp = req.GetResponse();
            responsebody = new System.IO.StreamReader(resp.GetResponseStream()).ReadToEnd().Trim();


Her er url'en: https://job.jobnet.dk/CV/Frontpage.aspx/Login

Jeg har med en browser extension til chrome, som hedder POSTMAN, forsøgt at imitere et POST kald, men med samme resultat som når jeg fra koden prøver, altså melder den at user og pw ikke er udfyldt.
Avatar billede SkarpC Nybegynder
16. november 2013 - 21:00 #3
Fedt, det skulle så ikke have været angivet som svar..
Avatar billede Syska Mester
16. november 2013 - 22:48 #4
Ja, kan faktisk godt se det er forskelligt alt efter om man bruger browseren og se på "Dev Tools" eller "Postman" i Chrome.

Meget mærkeligt. Min første tanke er at de måske har en cookie de kigger på. De kan jo også kigge på andre parametre men kan ikke lige gennemskue det.

Du kunne måske prøve at tage cookies fra et initielt request og sætte dem på det næste hvor du prøver at logge ind.

Det synes jeg ikke lige at man kan i Postman.
Avatar billede SkarpC Nybegynder
16. november 2013 - 23:34 #5
Det var faktisk også det jeg tænkte at jeg skulle, men det har jeg ingen erfaring med, har kun tidligere forsøgt at webscrabe(undskyld) sider som ikke kræver login.

Du ved ikke lige hvordan man gemmer den indledende cookie information og så sender den med igen? :D

For det der står i header det kan jeg altid spoofe, men cookie ved jeg sku ikke lige hvordan funger.
Avatar billede SkarpC Nybegynder
17. november 2013 - 00:04 #6
Fedt svaret var her:

http://stackoverflow.com/questions/3258044/c-sharp-webrequest-http-post-with-cookie-port-from-curl-script

Det virker, simpel og nem løsning.. Bare øv når man ikke selv kan komme frem til det..

Hvis du vil have points så giv svar, du hjalp mig med at finde en vej mod målet..
Avatar billede Syska Mester
17. november 2013 - 01:05 #7
Svar.

Så antager jeg det kom til at virke med at logge ind eller?

mvh
Avatar billede SkarpC Nybegynder
17. november 2013 - 09:37 #8
Det er korrekt, response var det samme som browseren ville få, så det var bare klasse.
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

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