Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP/cURL] Inloggen op externe site via script

Pagina: 1
Acties:

  • Rhndy
  • Registratie: Februari 2010
  • Laatst online: 04-06 09:32
Beste Tweakers,

Het komt zelden voor dat ik een vraag hier stel maar als het zover is ben ik echt even het spoor bijster.
Ben nu ondertussen een uur of 6-7 verder sinds ik begonnen ben en kom er maar niet uit.

Ik wil het volgende doen:
Inloggen op de Tele2 site, alle tekst in een string hebben en deze string uitlezen en de belangrijke data (belminuten etc.) weergeven. Het gaat alleen al fout bij het eerste deel. Ik heb via internet e.e.a. aan uitleg gevonden over het inloggen op https-sites. Omdat ik even geen tijd had om de safe-mode bij m'n webserver uit te zetten (password vergeten, moest ik wachten etc.) draai ik het spul even lokaal:

Ik heb de volgende code om in te loggen op de site van Tele2:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
$username = 'telefoonnummer';    //Even afgeschermd
$password = 'wachtwoord';  // even afgeschermd
$loginUrl = 'https://mijnmobiel.tele2.nl/login.jsp';
$endUrl = 'https://mijnmobiel.tele2.nl/';

//Http Post Data
$httpPostFields = 'j_username='.$username.'&j_password='.$password.'&recaptcha_response=&Login=';

//CURL

// Create temp file to store cookies 
$ckfile = tempnam ("/Users/RhandyWagner/Desktop/tele2/tmp/", "CURLCOOKIE"); // Hier sla ik m'n cookies op

// Get Login page and its cookies and save cookies in the temp file 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $loginUrl); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); // Stores cookies in the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 

// Post login form and follow redirects 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $loginUrl); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'j_username='.$username.'&j_password='.$password.'&_spring_security_remember_me=&recaptcha_response=&Login='); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); //Uses cookies from the temp file 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); // Stores cookies in the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Tells cURL to follow redirects 
$result = curl_exec($ch); 

echo $result;

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $endUrl); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); //Uses cookies from the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$end = curl_exec($ch);

echo $end;



?>


Ik krijg dan niets te zien. Als ik dit in de webconsole laad, zie ik het volgende:

code:
1
[17:20:35.048] GET http://localhost:8888/Login.php [HTTP/1.1 200 OK 716ms]


Met wat wijzigingen krijg ik meer te zien. Dan zoekt de pagina alleen naar .css files die op de Tele2 staan, maar zoekt deze bij localhost. Dit gebeurde ook toen ik een niet https site wilde testen. Ik kreeg niets te zien maar in de requests werd er op localhost gezocht:
code:
1
2
3
4
5
[17:21:47.549] GET http://localhost:8888/bbqLogin.php [HTTP/1.1 200 OK 1604ms]
[17:21:49.196] GET http://localhost:8888/media/jui/css/chosen.css [HTTP/1.1 404 Not Found 56ms]
[17:21:49.199] GET http://localhost:8888/templates/isis/css/template.css [HTTP/1.1 404 Not Found 55ms]
[17:21:49.201] GET http://localhost:8888/media/system/js/mootools-core.js [HTTP/1.1 404 Not Found 55ms]
[17:21:49.203] GET http://localhost:8888/media/system/js/core.js [HTTP/1.1 404 Not Found 55ms]



Heeft iemand hier een idee hoe ik het voor elkaar kan krijgen om dus in te loggen en die data in kan lezen in m'n php file?

Alvast bedankt!

  • PatrickH89
  • Registratie: November 2009
  • Laatst online: 17:24
Als er wel requests naar die files (de CSS en JS) worden gedaan wordt er gewoon HTML geprint neem ik aan? En die requests zijn er dan omdat er in de head van die html een relatieve verwijzing staat.

Het zou kunnen dat je met die echo niets ziet, omdat hij daarvoor css nodig heeft (het is dan wel wat vreemd dat je niets ziet, maar misschien wordt er van alles opgehaald met de JS files en dus AJAX requests). Bekijk eens de source van je script? Anders even echo met htmlentities ofzo.

Maw, de vraag is: krijg je niets terug van de cURL request (onwaarschijnlijk, want er worden get requests uitgevoerd naar de files van de tele2 website) of zie je gewoon niets (lijkt mij waarschijnlijk).

  • Rhndy
  • Registratie: Februari 2010
  • Laatst online: 04-06 09:32
PatrickH89 schreef op vrijdag 11 oktober 2013 @ 17:32:
Als er wel requests naar die files (de CSS en JS) worden gedaan wordt er gewoon HTML geprint neem ik aan? En die requests zijn er dan omdat er in de head van die html een relatieve verwijzing staat.

Het zou kunnen dat je met die echo niets ziet, omdat hij daarvoor css nodig heeft (het is dan wel wat vreemd dat je niets ziet, maar misschien wordt er van alles opgehaald met de JS files en dus AJAX requests). Bekijk eens de source van je script? Anders even echo met htmlentities ofzo.

Maw, de vraag is: krijg je niets terug van de cURL request (onwaarschijnlijk, want er worden get requests uitgevoerd naar de files van de tele2 website) of zie je gewoon niets (lijkt mij waarschijnlijk).
Ik heb het even opnieuw geprobeerd en krijg nu dus dit:

code:
1
2
3
[18:00:49.815] GET http://localhost:8888/Login.php [HTTP/1.1 200 OK 530ms]
[18:00:50.387] GET http://localhost:8888/style/tele2/css/base.css [HTTP/1.1 404 Not Found 1ms]
[18:00:50.390] GET http://localhost:8888/style.css [HTTP/1.1 404 Not Found 1ms]


De pagina toont:

Er is helaas iets misgegaan met de verbinding.
Excuus voor het ongemak. Probeer het later nog een keer.
Ga terug naar het inlogscherm.

Bovenstaand wordt alleen getoond als ik het certificaat niet 'meestuur'. Als ik dat wel doe krijg ik dus een lege pagina die ook met htmlentities niets laat zien. De volgende code heb ik toegevoegd:

PHP:
1
2
3
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "//Users/RhandyWagner/Desktop/tele2/tmp/cert.crt");


Ik krijg dus een complete blanco pagina met een HTTP 200 Status...

Enige ding waar ik mee zit. ik vraag die site op en ik zie een GET-request. Maar in die php-pagina zit een POST request. Deze kan ik dus nergens terugvinden in de logs.

[ Voor 14% gewijzigd door Rhndy op 11-10-2013 18:10 ]


  • ieperlingetje
  • Registratie: September 2007
  • Niet online
Net even getest en ik zie dat er op de website van tele2 bij het inloggen een POST wordt uitgevoerd naar /j_spring_security_check, maar ik zie dat nergens terug in je script. Dus volgens mij zit je daar al fout.

Tijdmachine | Nieuws trends


  • Rhndy
  • Registratie: Februari 2010
  • Laatst online: 04-06 09:32
Dat was ik vergeten te vermelden. Daar kwam ik ook niet uit.
Bij een html-form zet ik bv. Bij form action form.php. Maar is j_security_check een pagina binnen het domein?

  • ieperlingetje
  • Registratie: September 2007
  • Niet online
Die pagina staat op mijnmobiel.tele2.nl

Tijdmachine | Nieuws trends


  • Rhndy
  • Registratie: Februari 2010
  • Laatst online: 04-06 09:32
ieperlingetje schreef op vrijdag 11 oktober 2013 @ 18:26:
Die pagina staat op mijnmobiel.tele2.nl
dan ga ik dat vanavond even proberen. Thanks voor het kijken en zodra ik het heb aangepast laat ik het weten !!

EDIT: Het is gelukt, harstikke bedankt voor je hulp. Krijg nu de pagina als platte tekst binnen en kan nu in ieder geval verder. Nogmaals hartstikke dank!

[ Voor 22% gewijzigd door Rhndy op 11-10-2013 22:48 ]


  • Rhndy
  • Registratie: Februari 2010
  • Laatst online: 04-06 09:32
Ben ik weer: Ik ben wat verder, ik krijg in ieder geval een pagina binnen.
Ik krijg alleen niet 'alles' binnen.
De content die ik zoek staat in de volgende tree:
div id=
outercontainer - container - body - home - dashboard etc.

Uit de output van het script is er wel een body-tag maar daar zit volgens Firebug niets onder.

Dit houdt in dat ik dus niet bij de content kan komen via een DOM parser.

Volgens mij zit ik wel op de goede pagina. Ik heb dit bij een andere pagina getest waarvan ik weet welke data er staat en daar is duidelijk te zien dat ik op de pagina zit waar die data zou moeten staan. Daar heb ik echter precies hetzelfde. Daar waar in de code de data onder moet staan. Daar is niets te zien en kan ik niet dieper de tree in.

[ Voor 41% gewijzigd door Rhndy op 12-10-2013 00:12 ]


  • ieperlingetje
  • Registratie: September 2007
  • Niet online
De data wordt dan waarschijnlijk via AJAX ingeladen. Je moet dus die AJAX request opvragen via CURL en daarbij ook het sessie ID meesturen.

Tijdmachine | Nieuws trends

Pagina: 1