curl login
Ik probeer Curl wat beter te leren kennen, maar tot nu toe gebeurt er nog niet zoveel. Ik wil graag gegevens van een ingelogde pagina afhalen zonder dat ik zelf moet inloggen. Ik heb al meerdere voorbeeldjes gevonden, maar lijken het niet te doen. Ik krijg gewoon een inlog veld of een pagina dat ik niet ben ingelogd.
Ik probeer 't nou even in 1 pagina, maar er gebeurt naar mijn idee niks. Ik heb nog even geen controle op inlog, maar hij zou toch in iedergeval moeten posten? Dus zou ik toch de melding "Er is gepost" moeten zien? Ik zie alleen een lege pagina. Iemand een idee?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'login.php');
curl_setopt($ch, CURLOPT_POST, true); // Request method op POST zetten
curl_setopt($ch, CURLOPT_POSTFIELDS, 'naam=naam&ww=ww'); //Dit zijn je postvelden, de naam is die van het html attribuut, en de value spreekt voor zichzelf
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); //Een Cookiejar aanmaken om de sessie cookie in op te slaan
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // geen output naar het scherm printen.
$output = curl_exec($ch); //uitvoeren en output opvangen
curl_close($ch);
print $output;
?>
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'login.php');
curl_setopt($ch, CURLOPT_POST, true); // Request method op POST zetten
curl_setopt($ch, CURLOPT_POSTFIELDS, 'naam=naam&ww=ww'); //Dit zijn je postvelden, de naam is die van het html attribuut, en de value spreekt voor zichzelf
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); //Een Cookiejar aanmaken om de sessie cookie in op te slaan
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // geen output naar het scherm printen.
$output = curl_exec($ch); //uitvoeren en output opvangen
curl_close($ch);
print $output;
?>
Code (php)
Gewijzigd op 29/07/2010 19:26:49 door Michael -
type foutje? er staat $ouput en je print $output.
Inderdaad. Gewijzigd, maar pagina & broncode zijn nog steeds leeg.
kan je dan gegevens van een pagina halen zonder ingelogd te zijn?
Het is al weer een tijd geleden maar ik heb onderstaande regel erbij staan, Ik kon wel niet op elke website inloggen.
http://ipadres/login.php van gemaakt. Ik heb ook die followlocation regel toegevoegd, nou krijg ik drie keer het formulier, maar niet dat ie gepost heeft of zo.
@Mark: Geen idee of je perse de volledige url moet geven? Ik heb nu maar Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<form method="POST" action="">
<input type="text" name="naam"/><br/>
<input type="text" name="ww"/><br/>
<input type="submit"/>
</form><form method="POST" action="">
<input type="text" name="naam"/><br/>
<input type="text" name="ww"/><br/>
<input type="submit"/>
</form><form method="POST" action="">
<input type="text" name="naam"/><br/>
<input type="text" name="ww"/><br/>
<input type="submit"/>
</form>
<input type="text" name="naam"/><br/>
<input type="text" name="ww"/><br/>
<input type="submit"/>
</form><form method="POST" action="">
<input type="text" name="naam"/><br/>
<input type="text" name="ww"/><br/>
<input type="submit"/>
</form><form method="POST" action="">
<input type="text" name="naam"/><br/>
<input type="text" name="ww"/><br/>
<input type="submit"/>
</form>
Sorry het is te lang geleden voor me om dit uit mijn hoofd op te lossen. En ik heb geen tijd om het opnieuw op te zoeken. Hopelijk kan iemand anders je helpen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$ch = curl_init();
//link naar de webpagina die in de form-tag 'action' staat
curl_setopt($ch, CURLOPT_URL, 'http://website.ext/inloggen.php');
//value 1: vraag de pagina op
//value 0: download het bestand
curl_setopt ($ch, CURLOPT_POST, 1);
//verander deze velden in de input-names die gevraagd worden
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'gebruikersnaam=blabla&wachtwoord=blabla&inloggen=Inloggen');
//url naar jou lege cookie.txt file
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
$store = curl_exec ($ch);
//link naar het bestand wat je wil downloaden na de login
curl_setopt($ch, CURLOPT_URL, 'http://website.ext/admin.php');
$content = curl_exec ($ch);
curl_close ($ch);
?>
$ch = curl_init();
//link naar de webpagina die in de form-tag 'action' staat
curl_setopt($ch, CURLOPT_URL, 'http://website.ext/inloggen.php');
//value 1: vraag de pagina op
//value 0: download het bestand
curl_setopt ($ch, CURLOPT_POST, 1);
//verander deze velden in de input-names die gevraagd worden
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'gebruikersnaam=blabla&wachtwoord=blabla&inloggen=Inloggen');
//url naar jou lege cookie.txt file
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
$store = curl_exec ($ch);
//link naar het bestand wat je wil downloaden na de login
curl_setopt($ch, CURLOPT_URL, 'http://website.ext/admin.php');
$content = curl_exec ($ch);
curl_close ($ch);
?>
Edit: CURLOPT_RETURNTRANSFER op 1 zetten loste mijn probleem op :-)
Gewijzigd op 31/07/2010 17:52:21 door Michael -
Ik het script nu mooi werken. Hij logt in op mijn site inloggen.php en haalt daarna een klein gedeelte met data van admin.php. Nou deze test is voltooid wil ik 't gebruiken voor een andere website, maar hierbij werkt 't niet. Ik krijg een foutmelding "Sessieprobleem" dit dus 't enige wat ik van de site terug krijg. Iemand hier een oplossing voor?
Oh, in de code hierboven (voor zo ver die nog relevant is) zie ik dat je RETURN TRANSFER uit zet, en vervolgens wel het probeerd op te slaan in $store.. ? Klinkt een beetje onlogisch bij mij.
Wat verder nog een handige CURLOPT is, is CURLOPT_VERBOSE. Zet die naar true (of 1), en er komt debugging informatie voorbij :)
Ik heb VERBOSE toegevoegd, maar krijg geen informatie daarvan.
Ik heb nu de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.website.ext/login.jsp');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//value 1: vraag de pagina op
//value 0: download het bestand
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, '***');
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
//curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt ($ch, CURLOPT_VERBOSE, 1);
$store = curl_exec ($ch);
curl_setopt($ch, CURLOPT_URL, 'https://www2.website.ext/blabla.do');
$content = curl_exec ($ch);
//show information regarding the request
//print_r(curl_getinfo($ch));
//echo curl_errno($ch) . '-' . curl_error($ch);
curl_close ($ch);
print_r($content);
?>
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.website.ext/login.jsp');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//value 1: vraag de pagina op
//value 0: download het bestand
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, '***');
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
//curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt ($ch, CURLOPT_VERBOSE, 1);
$store = curl_exec ($ch);
curl_setopt($ch, CURLOPT_URL, 'https://www2.website.ext/blabla.do');
$content = curl_exec ($ch);
//show information regarding the request
//print_r(curl_getinfo($ch));
//echo curl_errno($ch) . '-' . curl_error($ch);
curl_close ($ch);
print_r($content);
?>
Zover ik weet wordt cookie.txt ook niet gebruikt. Moet ik misschien zelf hier iets inzetten zodat ik 't sessieprobleem niet meer krijg?
bump