Inloggen op een ASP site met cUrl
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
Code (php)
1
2
3
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]" />
<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.
Als ik een fout wachtwoord invoer geeft hij ook geen melding.
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.
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.
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
curl_setopt($ch, CURLOPT_VERBOSE, true);
precies plaatsen? Helemaal onderaan, helemaal bovenaan..
En de site kan ik helaas niet geven.
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
De parameter stond al goed. En hij geeft echt helemaal niets weer.
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
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
35
36
37
38
39
40
41
42
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;
?>
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.
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)
1
2
3
4
5
6
7
8
9
10
11
12
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();
?>
//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
Hartelijk dank!!
Kan je de werkende code hier neerzetten?