Avatar billede SimonBStoevring Nybegynder
19. oktober 2010 - 18:56 Der er 11 kommentarer og
1 løsning

Log ind med cURL

Hej,

På skolen har vi en hjemmeside, som vi kan logge ind på. Fra denne side vil jeg gerne hente nogle billeder og til dette har jeg lavet et PHP-script.

Det er mig dog et problem, hvordan jeg får logget ind og jeg er ikke engang sikker på, om dette kan lade sig gøre. Jeg har dog læst mig frem til på nettet, at det burde kunne lade sig gøre at logge ind på en side med cURL, det har bare ikke haft held med. Jeg har prøvet alverdens eksempler, jeg har kunnet finde på nettet, men ingen af dem har jeg altså kunne få til at virke.

Det drejer sig om en log-ind boks hvor til der er to felter: brugernavn og kodeord. Disse hedder henholdsvis "m$Content$username2" og "m$Content$password2" på siden.
Når jeg er logget ind har jeg brug for at navigere til en underside - og stadig være logget ind.

Er dette muligt og kunne nogen måske guide mig i retning af en løsning?

Med venlig hilsen
Simon B. Støvring
Avatar billede caspersch Nybegynder
19. oktober 2010 - 21:03 #1
Hej Simon,

Det er muligt med curl, med smid din kode op, samt den formular du skal logge ind igennem. Jeg benytter det selv til at hente priser fra andre webshops på http://www.parfume-priser.dk

Dbh. Casper
Avatar billede SimonBStoevring Nybegynder
19. oktober 2010 - 21:42 #2
Hej Casper,

Det lyder rigtig godt. Mit script til at hente billederne er ikke helt færdigt endnu. Det skal lige flettes sammen med et ældre script, jeg lavede engang. Dette har jeg ikke gjort endnu, da jeg ikke rigtig har kunnet gribe det an, fordi "scriptet ikke har været logget ind", når det er blevet kørt. Der skulle dog være nok at arbejde med og det at hente billederne burde ikke være et problem.

Formularen, jeg ønsker at logge ind i, ligger her.
https://www.lectio.dk/lectio/285/login.aspx

Jeg ønsker at hente billedet som vises ved siden af navnet ("Eleven Simon Binderup Støvring") i venstre side af skærmen. Dette gøres for samtlige elever på skolen. Lige nu vil du blot se et gråt/hvidt "dummybillede", da du ikke er logget ind.
https://www.lectio.dk/lectio/285/SkemaNy.aspx?type=elev&elevid=1628118635

Scriptet kan ses på
http://snuzzer.dk/lectio-get/g.txt

Alt det gør lige nu er at hente elevernes navn samt elevid. Derudover "lader det som om", at det henter adressen på elevens billede. Det er bevidst, at den blot henter noget af adressen på dummybilledet lige nu. Det var blot for at teste, om jeg kunne hente alle elever fra A-Å på én gang, eller om det ville være for ressourcekrævende.
Grundstenen er lagt og jeg vurderer, at når først jeg er logget ind, vil det være simpelt at hente billedernes adresse og gemme dem.
Avatar billede majbom Novice
20. oktober 2010 - 19:58 #3
Avatar billede SimonBStoevring Nybegynder
20. oktober 2010 - 20:48 #4
splazz, netop den gennemgang har jeg faktisk læst og forsøgt mig med, desværre uden held. Måske jeg skulle prøve igen. Jeg håber lidt, at Casper vil komme med et udkast eller skrive et par ord om, hvordan jeg kan gribe mit problem an.
Men du skal have mange tak for hjælpen.
Avatar billede SimonBStoevring Nybegynder
21. oktober 2010 - 11:25 #5
Hej,

Jeg har forsøgt med guiden, splazz henviste til.

http://snuzzer.dk/lectio-get/i.php

Det er mit resultat og for mig ligner det ikke, at den er kommet med fejl. Har jeg ret i det?

http://snuzzer.dk/lectio-get/i.txt

Ovenstående er koden bag i.php.

Hvis det er rigtigt, det jeg har gjort, kan nogen så fortælle mig, hvordan jeg med cURL går til en anden side, når jeg er logget ind og henter kildekoden fra denne side, så jeg kan gemme billederne til serveren?
Avatar billede SimonBStoevring Nybegynder
21. oktober 2010 - 19:27 #6
Hej igen,

Jeg har forsøgt at logge ind, gå videre til en underside og udskrive denne sides kildekode, som den vil se ud, når man er logget ind. Desværre har jeg ikke haft held med dette.

Mit forsøg kan ses på nedenstående link.
http://snuzzer.dk/lectio-get/l.php

Jeg har lagt kildekoden op her.
http://snuzzer.dk/lectio-get/l.txt

Det er ikke denne kildekode, jeg burde få, hvis jeg var logget ind. I så fald burde der naturligvis ikke stå "Log ind" og den burde heller ikke forsøge at vise '/lectio/img/defaultfoto_small.jpg' men derimod elevens billede.

Jeg har oprettet cookie.txt i samme mappe, som scriptet ligger i og givet denne fil rettighederne 777.

Er der nogen, der har tid til at kigge på min kildekode og sige mig, hvad jeg kan have gjort forkert?
Avatar billede SimonBStoevring Nybegynder
23. oktober 2010 - 12:04 #7
Hej,

Med hjælp fra Casper, er det lykkedes mig at komme lidt nærmere et færdigt resultat. Scriptet virker dog ikke helt endnu - den er stadig ikke logget ind, men jeg tror, at dette skyldes, at scriptet kun gemmer to ud af seks cookies i cookie.txt. Logger jeg ind via min browser, gemmes der seks cookies på computeren, men scriptet gemmer altså kun seks.

Er der nogen, der har et bud på, hvorfor scriptet ikke gemmer alle? Eller om det er et andet sted, der er noget i vejen?

$curl_connection = curl_init();    // establish connection

// cURL options
curl_setopt($curl_connection, CURLOPT_URL, 'https://www.lectio.dk/lectio/285/login.aspx');
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);    // does not trigger error when no SSL certificate
curl_setopt($curl_connection, CURLOPT_POST, 1);

// data to submit to remote form
$post_data['m$Content$username2'] = '2008zsbs';    //username removed
$post_data['m$Content$password2'] = 'medion1113';    // password removed

// format data to string (eg. key1=value1&key2=value2)
foreach($post_data as $key => $value) {
    $post_items[] = $key . '=' . $value;
}
$post_string = implode('&', $post_items);

// cURL options
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);    // post $post_string
curl_setopt($curl_connection, CURLOPT_COOKIEFILE, realpath('cookie.txt'));    // save cookie in cookie.txt
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, realpath('cookie.txt'));    // save cookie in cookie.txt
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, true);    // follow directions from remote sites header
curl_setopt($curl_connection, CURLOPT_HEADER, true);
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);    // timeout 30 sec
curl_setopt($curl_connection, CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');    // simulated browser
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);    // force cURL to not display the output but return as a string
curl_exec($curl_connection);
curl_close($curl_connection);

// print_r(curl_getinfo($curl_connection)); // print error check
// echo '<hr />'.curl_errno($curl_connection).'-'.curl_error($curl_connection); // print error numbers

// $result = curl_exec($curl_connection);    // execute
// curl_close($curl_connection);    // close connection

// go to other page
$curl_connection = curl_init();
curl_setopt($curl_connection, CURLOPT_URL, 'https://www.lectio.dk/lectio/285/SkemaNy.aspx?type=elev&elevid=1628118635');
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);    // does not trigger error when no SSL certificate
curl_setopt($curl_connection, CURLOPT_COOKIEFILE, realpath('cookie.txt'));
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, realpath('cookie.txt'));
curl_setopt($curl_connection, CURLOPT_HEADER, true);
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);    // timeout 30 sec
curl_setopt($curl_connection, CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');    // simulated browser
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);    // force cURL to not display the output but return as a string
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);    // follow directions from remote sites header

$result = curl_exec($curl_connection);    // execute
curl_close($curl_connection);    // close connection
echo $result;    // print source
Avatar billede SimonBStoevring Nybegynder
23. oktober 2010 - 12:13 #8
Hov, jeg kom til at lægge brugernavn og kodeord ved. Koden er nu rettet.
Avatar billede SimonBStoevring Nybegynder
24. oktober 2010 - 19:30 #9
Jeg er stadig på bar bund.

Kan det have noget med opbygningen af sidens formular at gøre?
Avatar billede SimonBStoevring Nybegynder
24. oktober 2010 - 19:44 #10
Altså om noget af dette er af betydning.

<form name="aspnetForm" method="post" action="SkemaNy.aspx?type=elev&amp;elevid=1628118635" onsubmit="java script:return WebForm_OnSubmit();" onkeypress="java script:return WebForm_FireDefaultButton(event, 's_m_defaultformbtn')" id="aspnetForm" autocomplete="off">
Avatar billede SimonBStoevring Nybegynder
25. oktober 2010 - 21:30 #11
Det lader til, at nogle cookies - eller i hvert fald cookien 'isloggedin3' bliver sat gennem JavaScript.

Kan jeg gøre noget mod dette?
Avatar billede SimonBStoevring Nybegynder
10. november 2010 - 14:14 #12
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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