Beste,
Ik moet voor een klant hun site spideren, dit gebeurt dan ook via CURL, ook zit hier een login in, zou geen probleem moeten zijn met CURL.
Echter ik kom het volgende probleem tegen.
Als ik een login post naar hun site, heeft de resultaat bron de inlog data die ik verwacht.
Echter als ik binnen diezelfde CURL sessie een volgende pagina aanroep waarvoor je ingelogd moet zijn, dan heb ik die data niet meer.
Om het nog wat vager te maken, in het onderstaande script haal ik uit de headers de gegenereerde sessie-cookie op, die zet ik in een variable, en geef ik weer mee aan de volgende 'call'.
Maar dan ben ik niet ingelogd. De waarde van de '$cookie'-variable klopt qua inhoud. Als ik dan in mijn browser inlog op die site, en de PHPSESSID data uit de browser kopieer naar de broncode van de 2e call (dus die data zet ik in de '$cookie'-variable) dan ben ik bij de 2e call ineens wel altijd ingelogd
Het script om de CURL aanvragen te doen:
Iemand enig idee?
Ik moet voor een klant hun site spideren, dit gebeurt dan ook via CURL, ook zit hier een login in, zou geen probleem moeten zijn met CURL.
Echter ik kom het volgende probleem tegen.
Als ik een login post naar hun site, heeft de resultaat bron de inlog data die ik verwacht.
Echter als ik binnen diezelfde CURL sessie een volgende pagina aanroep waarvoor je ingelogd moet zijn, dan heb ik die data niet meer.
Om het nog wat vager te maken, in het onderstaande script haal ik uit de headers de gegenereerde sessie-cookie op, die zet ik in een variable, en geef ik weer mee aan de volgende 'call'.
Maar dan ben ik niet ingelogd. De waarde van de '$cookie'-variable klopt qua inhoud. Als ik dan in mijn browser inlog op die site, en de PHPSESSID data uit de browser kopieer naar de broncode van de 2e call (dus die data zet ik in de '$cookie'-variable) dan ben ik bij de 2e call ineens wel altijd ingelogd
Het script om de CURL aanvragen te doen:
code:
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
49
50
51
| $postinfo = "login=<USERNAME>&password=<PASSWORD>";
$ch = curl_init();
// First request
curl_setopt($ch, CURLOPT_URL, '<URL>');
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Set post
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
curl_setopt( $ch, CURLOPT_FAILONERROR, false );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, false );
curl_setopt( $ch, CURLOPT_HEADER, true );
curl_setopt( $ch, CURLOPT_COOKIESESSION, true );
curl_setopt( $ch, CURLOPT_FRESH_CONNECT, true );
$postresult = curl_exec($ch); // Has the login data
// Set cookie
$pattern = "#Set-Cookie: (.*?; path=.*?)\n#";
preg_match_all($pattern, $postresult, $matches);
$cookie = $matches[ 1 ][ 0 ];
/*
Deze voeg ik dan toe vanuit de browser sessie.
Dan ben ik wel ineens ingelogd in de onderstaande call.
$cookie = 'PHPSESSID=6jnufr5rs73jvaa41lele1rk83; path=/';
*/
// New request
curl_setopt($ch, CURLOPT_URL, '<URL>');
curl_setopt($ch, CURLOPT_COOKIE, $cookie );
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_FAILONERROR, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$html = curl_exec($ch); // Has no login data
curl_close($ch); |
Iemand enig idee?