[PHP] Met CURL Get request doen met sessies en vars

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hallo mensen,

de search leverde over dit topic wel enkele resultaten, maar dit waren meer curl workarounds. Helaas heb ik mijn script nog niet werkend gekregen.

Het doel:
De inhoud van een asp pagina downloaden naar een string, deze asp pagina heeft een sessionid nodig.

Mijn script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function get_url_contents($url){
        $crl = curl_init();
        $timeout = 5;
        curl_setopt ($crl, CURLOPT_URL,$url);
        curl_setopt($crl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)");
        curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($crl, CURLOPT_HEADER,1);
        curl_setopt($crl, CURLOPT_COOKIEFILE,"cookiefile.txt");
        curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
        $ret = curl_exec($crl);
        curl_close($crl);
        return $ret;
}
$str = get_url_contents("http://markt.domijn.nl/domijn/default.aspx");
echo $str;


Het probleem is nu, dat ik in IE een andere pagina te zien krijg dan mijn $str, de cookiefile.txt is leeg als ik deze bekijk na het aanroepen van mijn script..... mijn vermoeden is dat de cookie met het sessionid niet juist gezet word en/of ik geen juiste referrer doorgeef. Want de originele url is:
http://markt.domijn.nl/do...spx?taskname=DirectTeHuur

[ Voor 8% gewijzigd door Verwijderd op 23-02-2007 10:25 ]


Acties:
  • 0 Henk 'm!

  • messi
  • Registratie: Oktober 2001
  • Laatst online: 20:09
Met het bovenstaande script geef je en geen session id mee en ook geen get waarde ;)

op de php.net pagina (http://nl2.php.net/curl) staat in de comments wel een goed voorbeeld

Onze excuses voor het ontbreken van de ondertiteling.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem zit wel in de referrer denk ik, dit is inmiddels mijn script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function get_url_contents($url){
        $crl = curl_init();
        $timeout = 5;
        curl_setopt ($crl, CURLOPT_URL,$url);
        curl_setopt($crl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)");
        curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt ($crl, CURLOPT_COOKIEJAR, "cookiefile.txt");
        curl_setopt ($crl, CURLOPT_COOKIEFILE, "cookiefile.txt");
        $ret = curl_exec($crl);
        curl_close($crl);
        return $ret;
}
$str = get_url_contents("http://markt.domijn.nl/domijn/default.aspx");

echo $str;
?>


Als ik eerst 1x de url aanroep met de get parameter, en daarna zonder, werkt het wel.... probleem lijkt mij dus in de referrer te zitten....

Acties:
  • 0 Henk 'm!

Verwijderd

Als je nu eerst naar default.aspx gaat met deze optie van CURL

PHP:
1
curl_setopt ($crl, CURLOPT_COOKIEJAR, 'cookie');


Hiermee wordt in ieder geval je cookie opgeslagen.
Als je daarna naar http://markt.domijn.nl/do...spx?taskname=DirectTeHuur gaat met de volgende optie geef je de opgeslagen cookie mee

PHP:
1
curl_setopt ($crl, CURLOPT_COOKIEFILE, 'cookie');

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Vreemd genoeg werkt dit wel:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function get_url_contents($url){
        $crl = curl_init();
        $timeout = 5;
        curl_setopt ($crl, CURLOPT_URL,$url);
        curl_setopt($crl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)");
        curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt ($crl, CURLOPT_COOKIEJAR, "cookiefile.txt");
        curl_setopt ($crl, CURLOPT_COOKIEFILE, "cookiefile.txt");
        $ret = curl_exec($crl);
        curl_close($crl);
        return $ret;
}
$str = get_url_contents("http://markt.domijn.nl/domijn/default.aspx?taskname=DirectTeHuur");
$str = get_url_contents("http://markt.domijn.nl/domijn/default.aspx");
$str = get_url_contents("http://markt.domijn.nl/domijn/default.aspx");
echo $str;
?>

Bij de 1e aanvraag na de aanvraag met GET parameter zie ik nog een 302 (moved), bij de 2e niet ....

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 23 februari 2007 @ 11:06:
Als je nu eerst naar default.aspx gaat met deze optie van CURL

PHP:
1
curl_setopt ($crl, CURLOPT_COOKIEJAR, 'cookie');


Hiermee wordt in ieder geval je cookie opgeslagen.
Als je daarna naar http://markt.domijn.nl/do...spx?taskname=DirectTeHuur gaat met de volgende optie geef je de opgeslagen cookie mee

PHP:
1
curl_setopt ($crl, CURLOPT_COOKIEFILE, 'cookie');
Nu met jou oplossing:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function get_url_contents($url,$what){
        $crl = curl_init();
        $timeout = 5;
        curl_setopt ($crl, CURLOPT_URL,$url);
        curl_setopt($crl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)");
        curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
        if ($what == "set") {        
                curl_setopt ($crl, CURLOPT_COOKIEJAR, "cookiefile.txt");
        } elseif($what == "give") {
                curl_setopt ($crl, CURLOPT_COOKIEFILE, "cookiefile.txt");
        }
        $ret = curl_exec($crl);
        curl_close($crl);
        return $ret;
}
$str = get_url_contents("http://markt.domijn.nl/domijn/default.aspx?taskname=DirectTeHuur","set");
$str = get_url_contents("http://markt.domijn.nl/domijn/default.aspx","give");
$str = get_url_contents("http://markt.domijn.nl/domijn/default.aspx","give");
echo $str;
?>


Klein beetje vies, maarja, nu werkt hij ook pas, bij de 2e aanroep, niet bij de eerste |:(
Pagina: 1