Inloggen op een ASP site met cUrl

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stefan Lochten

Stefan Lochten

20/05/2010 12:13:13
Quote Anchor link
Hallo Allemaal,

Is het mogelijk om op een ASP site in te loggen met gebruik van cUrl in PHP?

Ik heb het al een aantal keer geprobeerd. En in met PHP sites lukt het wel. En met alle ASP sites lukt het niet.

Ik heb het nu al een aantal keer geprobeerd en het lukt me niet.

Met vriendelijke groet,
Stefan
 
PHP hulp

PHP hulp

21/11/2024 12:58:48
 
Steff   an

Steff an

20/05/2010 12:24:34
Quote Anchor link
Is het toevallig een website die gebruik maakt van fratsen als dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="[hier staat iets]" />

Zo ja, dan moet eerst die data ophalen en vervolgens die data ook meesturen.
 
Stefan Lochten

Stefan Lochten

20/05/2010 12:28:04
Quote Anchor link
Ja, daar maakt die site ook gebruik van. Die data heb ik allemaal opgehaald en de value gezet. Maar dan doet hij nog steeds niets.
Als ik een fout wachtwoord invoer geeft hij ook geen melding.
 
Steff   an

Steff an

20/05/2010 12:33:24
Quote Anchor link
Kan me herinneren dat je de data van __VIEWSTATE door urlencode moet halen.

Je krijgt dus zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$postdata = "EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=".urlencode($data)
Gewijzigd op 20/05/2010 12:34:24 door Steff an
 
Stefan Lochten

Stefan Lochten

20/05/2010 13:53:18
Quote Anchor link
Dit heb ik gedaan. Maar doet het nog steeds niet. Alles lijkt goed te gaan. Cookie wordt geschreven. Maar ik krijg voor de rest helemaal niets terug.
 
Steff   an

Steff an

20/05/2010 14:07:50
Quote Anchor link
Wat als je
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
curl_setopt($ch, CURLOPT_VERBOSE, true);

gebruikt om wat meer (debug)informatie te krijgen?

Als je ziet dat er een redirect/move of wat dan ook gedaan wordt, dan moet je het volgende nog gebruiken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);


Wellicht is het handiger te vertellen om welke website het gaat, dan kunnen ik en eventueel anderen het zelf eens proberen.

En wat ook wel handig is, is dat je de code die je nu hebt eens laat zien.
Gewijzigd op 20/05/2010 14:09:04 door Steff an
 
Stefan Lochten

Stefan Lochten

20/05/2010 14:15:16
Quote Anchor link
En waar moet ik:
curl_setopt($ch, CURLOPT_VERBOSE, true);
precies plaatsen? Helemaal onderaan, helemaal bovenaan..
En de site kan ik helaas niet geven.
 
Steff   an

Steff an

20/05/2010 14:19:00
Quote Anchor link
Volgensmij moet het wel goed komen als je het plaatst na curl_init(...) en voor curl_exec(...). Misschien dat je de eerste parameter nog even moet veranderen, maar ik hoop dat je dat wel door hebt/zal hebben.

Nog steeds lijkt het mij wel handig, dat we je huidige code eens kunnen zien. Wel even de inloggegevens en de URL er uithalen ;)
Gewijzigd op 20/05/2010 14:27:46 door Steff an
 
Stefan Lochten

Stefan Lochten

20/05/2010 14:25:55
Quote Anchor link
De parameter stond al goed. En hij geeft echt helemaal niets weer.
 
Steff   an

Steff an

20/05/2010 14:29:00
Quote Anchor link
Heb je trouwens handmatig die VIEWSTATE data opgehaald of doe je dat elke keer voordat je de data verzend met cURL? Het is even geleden dat ik iets vergelijkbaars heb gemaakt en het staat mij bij dat die VIEWSTATE (steeds) veranderd.

Als je trouwens je code niet wil laten zien (zou niet weten waarom niet) dan zoek je het zelf maar uit... je wilt hulp krijgen of niet.
Gewijzigd op 20/05/2010 14:34:26 door Steff an
 
Stefan Lochten

Stefan Lochten

20/05/2010 15:35:46
Quote Anchor link
Dit is de code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
    define('POSTURL', 'url');
    $content = file_get_contents(POSTURL);
    preg_match_all("/<input type=\"hidden\" name=\"(.*)\" value=\"(.*)\">/", $content, $matches);
    preg_match_all("/setlac((.*))/", $content, $strLax);

    $codes = str_replace('(document.member,','',$strLax[1][0]);
    $codes = str_replace(');','',$codes);
    $arrCodes = explode(',',$codes);
    $vThirth = ( $arrCodes[0] + urlencode($matches[2][0]) );
    $vFourth = (( $arrCodes[0] % $arrCodes[1] ) + urlencode($matches[2][0]));

    $fFirst = $matches[1][0];
    $fSecond = $matches[1][1];
    $fThirth = $matches[1][2];
    $fFourth = $matches[1][3];
    $vFirst = $matches[2][0];
    $vSecond = $matches[2][1];
    $vThirth = $vThirth;
    $vFourth = $vFourth;

    define('POSTVARS', $fFirst.'='.$vFirst.'&'.$fSecond.'='.$vSecond.'&'.$fThirth.'='.$vThirth.'&'.$fFourth.'='.$vFourth.'&nickName=nickname&password=password&Submit=Login');

    $ch = curl_init(POSTURL);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
    curl_setopt($ch, CURLOPT_POST      ,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS    ,POSTVARS);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1);
    curl_setopt($ch, CURLOPT_HEADER      ,1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,0);

    ob_flush();
    curl_exec ($ch);
    $exec = ob_end_flush();
    curl_close ($ch);
    
    echo $exec;

    exit;
?>

Met de reguliere expressies haal ik alle data op uit het en zorg ik ervoor dat ze omgezet worden naar de juiste data.
Als de data niet juist is moet hij een melding geven, maar zoals ik al zei geeft hij niks terug.
 
Steff   an

Steff an

20/05/2010 15:47:58
Quote Anchor link
Wat als je die hele ob_* constructie weglaat, zie je dan wel iets?

Vanwaar die 'rare' constructie met ob_flush en ob_endflush? Zet 'CURLOPT_RETURNTRANSFER' op true .
Quote:
TRUE to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.


Het kan trouwens zijn dat je de eerste request ook met cURL moet doen, de cookies moet opslaan en vervolgens de inlogdata verzenden. Je krijgt dan zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
//Haal eerst de viewstate op
curl_init(url)
curl_setopt(... alles setopts voor cookies etc.)
$data = curl_exec();
preg_match_all(..)

//verzend vervolgens de inloggegevens
curl_setopt($ch, CURLOPT_URL, [andere url]);
curl_setopt(... alles setopts voor data verzenden etc.)
echo curl_exec();
?>


Edit:
...
Gewijzigd op 20/05/2010 16:28:43 door Steff an
 
Stefan Lochten

Stefan Lochten

21/05/2010 11:24:20
Quote Anchor link
Ik heb nu de eerste request gemaakt met cURL, en nu werkt het perfect!
Hartelijk dank!!
 
Klaas Vana

Klaas Vana

09/07/2010 14:08:39
Quote Anchor link
Kan je de werkende code hier neerzetten?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.