[PHP]Curl van dezelfde pagina gebruiken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Ik probeer met cUrl in PHP een login pagina te omzeilen zodat ik de data erna kan fetchen.

Het gaat om deze pagina:
https://login.hro.nl/v1/login

Het probleem is dat er een key wordt gegenereerd op de pagina en waarschijnlijk tijdens het inloggen wordt gecheckt.

Maar als ik cUrl eerst de pagina laat ophalen, de key fetch en dan krijg ik deze error: "You cannot attempt to re-submit a form that has been submitted already."

Ik heb nu dit:
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
    $url = 'https://login.hro.nl/v1/login';

    $curl = curl_init();

    curl_setopt ($curl, CURLOPT_URL, $url);
    curl_setopt ($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt ($curl, CURLOPT_USERAGENT, sprintf("Mozilla/%d.0",rand(4,5)));
    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($curl, CURLOPT_POST, 0);
    curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
    $html = curl_exec ($curl);

    preg_match('/name="lt" value="(.*?)"/is', $html, $m);
    $match = $m[1];
    echo $match;

    curl_setopt ($curl, CURLOPT_URL, $url);
    curl_setopt ($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt ($curl, CURLOPT_USERAGENT, sprintf("Mozilla/%d.0",rand(4,5)));
    curl_setopt ($curl, CURLOPT_HEADER, 0);
    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt ($curl, CURLOPT_POST, 1);
    curl_setopt ($curl, CURLOPT_POSTFIELDS, 'username=' . $Username . '&password=' . $Password . '&submit=login&_eventId=submit&credentialsType=ldap&lt=' . $match);

    $html = curl_exec ($curl);

    curl_close ($curl);
    echo htmlspecialchars($html);


Hoe kan ik deze pagina toch submitten als dezelfde sessie?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Meestal is het een kwestie van de pagina in kwestie bezoeken met je browser en checken wat je allemaal nodig hebt voor een goede login. Headers checken enzo :)

Moet je die eerste curl call niet closen? In feite zijn het gewoon 2 losse requests namelijk. En waarom laat je de useragent wisselen? Waarom niet gewoon 1 volledige vaste useragent invullen?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:51

crisp

Devver

Pixelated

Misschien moet je de JSESSIONID die je als cookie krijgt ook nog meesturen.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Cartman! schreef op donderdag 29 oktober 2009 @ 18:07:
Meestal is het een kwestie van de pagina in kwestie bezoeken met je browser en checken wat je allemaal nodig hebt voor een goede login. Headers checken enzo :)

Moet je die eerste curl call niet closen? In feite zijn het gewoon 2 losse requests namelijk. En waarom laat je de useragent wisselen? Waarom niet gewoon 1 volledige vaste useragent invullen?
Ik heb de headers nog niet bekeken.

Ik close hem niet omdat anders die key veranderd, en deze moet volgens mij matchen met de key die is POST, die zal wel in een sessie zijn opgeslagen.
crisp schreef op donderdag 29 oktober 2009 @ 18:07:
Misschien moet je de JSESSIONID die je als cookie krijgt ook nog meesturen.
Zo simpel inderdaad _/-\o_

Dit is de goede werkende 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
    $Username = 'studentnummer';
    $Password = 'pw';
$url = 'https://login.hro.nl/v1/login';

    $curl = curl_init();

    curl_setopt ($curl, CURLOPT_URL, $url);
    curl_setopt ($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt ($curl, CURLOPT_USERAGENT, sprintf("Mozilla/%d.0",rand(4,5)));
    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($curl, CURLOPT_POST, 0);
    curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt ($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
    $html = curl_exec ($curl);

    preg_match('/name="lt" value="(.*?)"/is', $html, $m);
    $match = $m[1];
    echo $match;

    curl_setopt ($curl, CURLOPT_URL, $url);
    curl_setopt ($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt ($curl, CURLOPT_USERAGENT, sprintf("Mozilla/%d.0",rand(4,5)));
    curl_setopt ($curl, CURLOPT_HEADER, 0);
    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt ($curl, CURLOPT_POST, 1);
    curl_setopt ($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
    curl_setopt ($curl, CURLOPT_POSTFIELDS, 'username=' . $Username . '&password=' . $Password . '&submit=login&_eventId=submit&credentialsType=ldap&lt=' . $match);

    $html = curl_exec ($curl);

    curl_close ($curl);
    echo ($html);

[ Voor 54% gewijzigd door Megamind op 29-10-2009 18:16 ]