[PHP] Curl resultaat gebruiken bij volgende curl sessie

Pagina: 1
Acties:
  • 162 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Is het mogelijk het resultaat van een curl sessie te gebruiken bij een volgende curl sessie? Ik moet gegevens van een site halen waar je eerst via een post een taal moet kiezen en daarna via een post die gegevens kunt ophalen.

Ik ben bang dat het niet mogelijk is, maar je weet maar nooit...

Op de search is best wat te vinden over curl en fsockopen, maar niet in de richting waar ik zoek :(

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • Equator
  • Registratie: April 2001
  • Laatst online: 09-09 15:29

Equator

Crew Council

#whisky #barista

Je kan de resultaten van je eerste curl sessie toch gewoon opslaan in een session variable of in een cookie :?

Die kan je later dan weer gewoon inlezen.. :)

Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Equator schreef op woensdag 09 mei 2007 @ 13:42:
Je kan de resultaten van je eerste curl sessie toch gewoon opslaan in een session variable of in een cookie :?

Die kan je later dan weer gewoon inlezen.. :)
Ik geloof niet dat het op deze manier kan. Kijk, na mijn eerste curl actie heb ik een taal gekozen. De output die ik dan krijg is een html pagina. Daarna wil ik gegevens ophalen, maar krijg ik die taalkeuze weer! Ik kan volgens mij niet de output van de eerste sessie gebruiken voor de tweede!

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Waarschijnlijk wordt bij de eerste curl actie een cookie gezet. Je moet zorgen dat je bij de tweede curl actie die cookie weer meegeeft zodat de site die je aan het uitlezen bent weet dat dat beide requests bij elkaar horen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Janoz schreef op woensdag 09 mei 2007 @ 14:08:
Waarschijnlijk wordt bij de eerste curl actie een cookie gezet. Je moet zorgen dat je bij de tweede curl actie die cookie weer meegeeft zodat de site die je aan het uitlezen bent weet dat dat beide requests bij elkaar horen.
Any thought's on how? :)

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • Equator
  • Registratie: April 2001
  • Laatst online: 09-09 15:29

Equator

Crew Council

#whisky #barista

Excuus, ik begreep je verkeerd :)
Any thought's on how? :)
Je cookiejar niet destroyen..
PHP:
1
2
3
4
5
// Create a cookiejar file
$cookiejar = tempnam("", "");
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiejar);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiejar);


En dan bij je 2e curl sessie dezelfde cookiejar gebruiken

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Door te kijken hoe die site die je aanroept eigenlijk werkt (gebruikt hij daadwerkelijk cookies?) en door http://www.php.net/curl door te lezen over hoe je cookies meegeeft en opvraagt (Is wat lastig, geef ik toen, maar ergens in de comments worden vast wel wat voorbeelden mbt cookies gegeven)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
volgens mij kun je cookies ook via de header meegeven... meen me te herinneren dat ik dat ooit gedaan heb... zal eens opzoeken...

edit: gevonden...
heb ooit zoiets gedaan... weet niet meer precies hoe het werk, maar dat is aan jou om uit te vinden :)

PHP:
1
2
3
4
5
6
7
8
9
10
$opts = array(
  'http'=>array(
   'method'=>"GET",
   'header'=>"Cookie: lang=2\r\n"
  )
);

$context = stream_context_create($opts);

$fp = fopen("http://www.eenwebsite.nl", 'r', false, $context);

[ Voor 58% gewijzigd door P.O. Box op 09-05-2007 14:33 ]


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Voor zover bedankt voor de hulp. Ik heb nu dit:

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
<?

// redirect url voor kiezen taal
$url = "http://www.elia.be/Controls/ChooseLanguage/ChooseLanguage.aspx";
$postdata['ACTIONTARGET'] = 'CHANGELANG.NL';

$cookiejar = tempnam("", "FOO");
if ($cookiejar)
{
    $ch = curl_init(); 
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookiejar);   
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_POST, true); 
    //curl_setopt ($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
    curl_exec ($ch); 
    
    // taal gekozen
}


// uitlezen cookie
$handle = fopen($cookiejar,"r");
$contents = "";
do {
    $data = fread($handle, 8192);
    if (strlen($data) == 0) {
        break;
    }
    $contents .= $data;
} while(true);
fclose ($handle);


echo $contents;

?>


Helaas blijft mijn scherm wit, betekent dit dan dat er geen (sessie)cookies gezet zijn?

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • Equator
  • Registratie: April 2001
  • Laatst online: 09-09 15:29

Equator

Crew Council

#whisky #barista

Als ik de output van de cookiejar bekijk:
code:
1
2
3
4
5
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

www.elia.be     FALSE   /       FALSE   0       ISAWPLB{694B5D2D-2C8F-4454-863D-C805C080810B}   {F52EDAB8-96CC-4DD4-BCA5-6916B0FE53C2}


En dat is dus met jou code :)
Zo te zien wordt de taalinstellling dus niet in een cookie bijgehouden..

Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Equator schreef op woensdag 09 mei 2007 @ 15:47:
Als ik de output van de cookiejar bekijk:
code:
1
2
3
4
5
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

www.elia.be     FALSE   /       FALSE   0       ISAWPLB{694B5D2D-2C8F-4454-863D-C805C080810B}   {F52EDAB8-96CC-4DD4-BCA5-6916B0FE53C2}


En dat is dus met jou code :)
Zo te zien wordt de taalinstellling dus niet in een cookie bijgehouden..
Als ik het cookie zelf open, in de cookies map, staat dit erin:
EliaPortal
IsoLanguage=NL
www.elia.be/
1536
3509037440
617110110
3181995200
29856300
*

Wel vreemd dan toch?

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47

killercow

eth0

misschien kun je eens kijken met wireshark wat je browser over de lijn stuurt, en wat curl over de lijn stuurt, zo lastig lijkt me dat niet,

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • Equator
  • Registratie: April 2001
  • Laatst online: 09-09 15:29

Equator

Crew Council

#whisky #barista

Ik heb een beetje lopen testen, en ik kom nu zover: Niet op de phpcode letten ;)
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
// redirect url voor kiezen taal
$url = "http://www.elia.be/default.aspx"; //Controls/ChooseLanguage/ChooseLanguage.aspx";
//$postdata['ACTIONTARGET'] = 'CHANGELANG.NL';

$cookiejar = tempnam("", "FOO");
if ($cookiejar)
{
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookiejar);
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'); // IE6
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    //curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_exec ($ch);


    $url = "http://www.elia.be/Controls/ChooseLanguage/ChooseLanguage.aspx?url=%2fdefault.aspx";
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookiejar);
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'); // IE6
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    $postdata['ACTIONTARGET'] = 'CHANGELANG.NL';
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    // taal gekozen

    curl_exec($ch);
    $newurl = "http://www.elia.be/default.aspx";
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookiejar);
    curl_setopt ($ch, CURLOPT_URL, $newurl);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'); // IE6
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt ($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);

}

echo $cookiejar;
?>

cat cookiejar:
code:
1
2
3
4
5
6
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

www.elia.be     FALSE   /       FALSE   0       ISAWPLB{694B5D2D-2C8F-4454-863D-C805C080810B}   {DC8016E0-7154-4F52-AD63-0271F3C804AD}
www.elia.be     FALSE   /       FALSE   2147483647      EliaPortal      IsoLanguage=NL


In $data staat:
code:
1
2
3
4
5
6
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href='/Controls/ChooseLanguage/ChooseLanguage.aspx?url=%2fdefault.aspx'>here</a>.</h2>
</body></html>
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href='/default.aspx'>here</a>.</h2>
</body></html>
Dus daar kom je nog niet veel verder mee ;)
Misschien inderdaad even met IEHttpanalyzer kijken wat er nog meer over de lijn gaat :)

[ Voor 8% gewijzigd door Equator op 09-05-2007 16:20 ]


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Equator schreef op woensdag 09 mei 2007 @ 16:18:
Ik heb een beetje lopen testen, en ik kom nu zover: Niet op de phpcode letten ;)
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
// redirect url voor kiezen taal
$url = "http://www.elia.be/default.aspx"; //Controls/ChooseLanguage/ChooseLanguage.aspx";
//$postdata['ACTIONTARGET'] = 'CHANGELANG.NL';

$cookiejar = tempnam("", "FOO");
if ($cookiejar)
{
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookiejar);
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'); // IE6
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    //curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_exec ($ch);


    $url = "http://www.elia.be/Controls/ChooseLanguage/ChooseLanguage.aspx?url=%2fdefault.aspx";
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookiejar);
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'); // IE6
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    $postdata['ACTIONTARGET'] = 'CHANGELANG.NL';
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    // taal gekozen

    curl_exec($ch);
    $newurl = "http://www.elia.be/default.aspx";
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookiejar);
    curl_setopt ($ch, CURLOPT_URL, $newurl);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'); // IE6
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt ($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);

}

echo $cookiejar;
?>

cat cookiejar:
code:
1
2
3
4
5
6
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

www.elia.be     FALSE   /       FALSE   0       ISAWPLB{694B5D2D-2C8F-4454-863D-C805C080810B}   {DC8016E0-7154-4F52-AD63-0271F3C804AD}
www.elia.be     FALSE   /       FALSE   2147483647      EliaPortal      IsoLanguage=NL


In $data staat:
code:
1
2
3
4
5
6
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href='/Controls/ChooseLanguage/ChooseLanguage.aspx?url=%2fdefault.aspx'>here</a>.</h2>
</body></html>
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href='/default.aspx'>here</a>.</h2>
</body></html>
Dus daar kom je nog niet veel verder mee ;)
Misschien inderdaad even met IEHttpanalyzer kijken wat er nog meer over de lijn gaat :)
Thanx, maar zover was ik al :|
Ik heb ook al even een mailtje gestuurd of ze hun data niet in xml of iets dergelijks kunnen aanbieden...

Iedereen bedankt in ieder geval, ik kloot nog even verder :)

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Het is me nu gelukt, ik kwam toevallig bij zoeken op google een link van elia.be tegen met achteraan de querystring dit: ?language=NL. Op deze manier omzeil je de language-redirect en kun je alles doen wat je wilt.

Iedereen bedankt voor de hulp!

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Helaas kom ik niet verder dan alleen de data van vandaag. Ik probeer het datum-kies-popupje van elia na te bootsen met mijn postvariabelen, maar de site blijft 10 mei weergeven in plaats van de gekozen 7 mei:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?

$url = "http://www.elia.be/repository/pages/c8f411a7f680489c91c0888a2cb0821b.aspx?language=NL";

$postdata['txtDate'] = '07/05/2007';
$postdata['ACTIONTARGET'] = 'DATECHANGED.07/05/2007';

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_POST, true); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
$data = curl_exec ($ch); 

echo ($data);

?>


Iemand misschien nog een idee? Datumselectie is een vereiste in het systeem dat ik aan het bouwen ben namelijk :|

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Toch gelukt. Eerst de viewstate ophalen (schijnt heel belangrijk te zijn in dotnet) en daarna de viewstate meeposten. 8 uur down the drain :)

Ronaldude.nl!!!, Specs

Pagina: 1

Let op:
[html][norml][/norml][/html]