[PHP] Curl resultaat gebruiken bij volgende curl sessie

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Gamerkoe
  • Registratie: Maart 2003
  • Laatst online: 08-08 21:43
*afgesplitst van [PHP] Curl resultaat gebruiken bij volgende curl sessie

Oud topic, maar ik heb eenzelfde soort issue.

Ik probeer een PDF bestand te downloaden, nadat ik ingelogd heb. Het inloggen lukt, in de response kan ik zien dat ik een HTTP200 terug krijg en wanneer ik de response ECHO, dan zie ik het login scherm. De tweede call lukt echter niet en geeft een header naar de loginpagina, ofwel de tweede curl is niet ingelogd.

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
//login form action url
$domain     = "https://domein.tld";
$url        = "$domain/Login/Login.php";
$postinfo   = "Username=".$username."&Password=".$password;
$cookiefile = "cookie.txt";

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
$res = curl_exec($ch);

if(curl_errno($ch)){
    echo 'Curl error: ' . curl_error($ch);
}
print_r(curl_getinfo($ch));


//downloading pdf file
curl_setopt($ch, CURLOPT_URL, "$domain/page/to/pdf/file.php?Order=12345678");

//curl_setopt($ch, CURLOPT_POST, false);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_SSLVERSION,3);

$data = curl_exec($ch);

if(curl_errno($ch)){
    echo 'Curl error 2: ' . curl_error($ch);
}

print_r(curl_getinfo($ch));

$destination = dirname(__FILE__) . '/file.pdf';
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);

curl_close($ch);


Ik heb ook dingetjes geprobeerd zoals:
POST velden leeg halen en GET call doen
code:
1
2
3
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_POSTFIELDS, "");


Ook heb ik met POST velden de parameters van het pdf bestand gevuld, maar dit maakt geen verschil.

Wanneer ik de cookie bekijk, dan komt volgende eruit:
code:
1
2
3
4
5
6
7
8
$file = fopen("cookie.txt", 'r');
echo fread($file, 100000000);

# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

liverutger.securearea.eu    FALSE   /   FALSE   0   PHPSESSID   rgi68sacvohtj48vqcsuntq0s6


Voor zover ik kan lezen moet je een COOKIEJAR gebruiken, maar dit gaat volgens mij goed. Anyone any idea??

[ Voor 4% gewijzigd door RobIII op 07-11-2016 22:50 ]

20x SF170s + SMA SB3000TL-21 | PV Output


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gamerkoe schreef op maandag 07 november 2016 @ 22:21:
Oud topic, maar ik heb eenzelfde soort issue.
Oud doesn't even begin to describe it ;) I.p.v. een (bijna) 10 jaar oud topic te kicken was een nieuw topic beter op z'n plaats en dus heb ik 't even afgesplitst (maar de titel 'tzelfde gehouden :P )

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • b2vjfvj75gjx7
  • Registratie: Maart 2009
  • Niet online
Ipv. de standaard PHP "curl" functie, kan je ook deze extension gebruiken;

http://simplehtmldom.sourceforge.net/

Is - onder water - hetzelfde als CURL (soort van - file_get_contents()) maar je kan er veel meer queries op los laten, als je de DOM eenmaal binnen hebt.

Ik gebruik het zelf voor geavanceerde OO Scrapers die ik later weer moet raadplegen.

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ik raad je aan om een programma als fiddler te gebruiken om precies alle request en response headers en data te bekijken als je gewoon via de browser inlogt. daarna doe je die requests exact na met curl om ingelogd te raken.

Acties:
  • 0 Henk 'm!

  • b2vjfvj75gjx7
  • Registratie: Maart 2009
  • Niet online
P.O. Box schreef op dinsdag 08 november 2016 @ 00:15:
ik raad je aan om een programma als fiddler te gebruiken om precies alle request en response headers en data te bekijken als je gewoon via de browser inlogt. daarna doe je die requests exact na met curl om ingelogd te raken.
Fiddler werkt op client level, niet op server level - dus daar ga je geen http-response-headers op low-level mee afvangen...

Acties:
  • +2 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

b2vjfvj75gjx7 schreef op dinsdag 08 november 2016 @ 00:25:
Fiddler werkt op client level, niet op server level - dus daar ga je geen http-response-headers op low-level mee afvangen...
Je browser is een client, dus je hoeft ook alleen maar een client na te doen met curl. Wat de server er mee doet is verder niet zo relevant.
En dat bekijken wat een client doet gaat prima met fiddler, maar ook met Edge's, Firefox' en Chrome's eigen network/developer panels. Daar hoef je niet per se fiddler of een andere losse tool meer voor te installeren.

Vanaf de server kijken is daarvoor niet nodig, want als het goed is komt daar precies aan wat de client verstuurde en vice versa. Ook hoef je niet op tcp/ip-niveau (of nog lager) te kijken, dat is zelden tot nooit relevant zodra je HTTP-verkeer wilt simuleren. En er is verder geen 'laag niveau' of 'hoog niveau' HTTP ;) Het wordt hooguit gelijk alvast wat voor je uitgesplitst (cookies, parameters, etc), maar in al dat soort tools die ik heb gebruikt kon je ook gewoon de 'raw' headers krijgen.
Bovendien doet curl een groot deel van die vertaling naar 'raw headers', waardoor het vaak juist handig is om die uitsplitsing wel te krijgen.

[ Voor 35% gewijzigd door ACM op 08-11-2016 08:02 ]


Acties:
  • +1 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07-10 19:27

Matis

Rubber Rocket

Er zijn mensen die het onverantwoord vinden om voor zo iets simpels een compleet framework te gebruiken.
Ikzelf til daar niet zo zwaar aan en wil je adviseren om eens te kijken naar guzzle.

Deze heb ik ik in combinatie met Goutte gebruikt voor het uitlezen, invullen en versturen van data naar de server middels PHP.

curl is een machtig mooie tool, maar op het moment dat er cookies, inloggen, sequences etc. om de hoek komen, grijp ik al snel naar eerder genoemde framework(s).

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • MaNDaRK
  • Registratie: Oktober 2001
  • Laatst online: 19:41
Ik heb dit probleem ook wel eens gehad.

Als je cookiejar gebruikt, gebruik je die volgens mij alleen maar bij het aanmaken. Als je nog een keer gebruik wil maken van de cookie dan gebruik je cookiefile.

Dus volgens mij zoiets:
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
49
50
51
//login form action url
$domain     = "https://domein.tld";
$url        = "$domain/Login/Login.php";
$postinfo   = "Username=".$username."&Password=".$password;
$cookiefile = "cookie.txt";

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
//curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
$res = curl_exec($ch);

if(curl_errno($ch)){
    echo 'Curl error: ' . curl_error($ch);
}
print_r(curl_getinfo($ch));


//downloading pdf file
curl_setopt($ch, CURLOPT_URL, "$domain/page/to/pdf/file.php?Order=12345678");
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
// ^^ onthouden van de cookie.


//curl_setopt($ch, CURLOPT_POST, false);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_SSLVERSION,3);

$data = curl_exec($ch);

if(curl_errno($ch)){
    echo 'Curl error 2: ' . curl_error($ch);
}

print_r(curl_getinfo($ch));

$destination = dirname(__FILE__) . '/file.pdf';
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);

curl_close($ch);

Acties:
  • 0 Henk 'm!

  • Gamerkoe
  • Registratie: Maart 2003
  • Laatst online: 08-08 21:43
Ik heb het zojuist opgelost. Er mistte een form parameter. Hier kwam ik achter door met F12 in Chrome nog eens goed naar de headers te kijken. Bedankt voor het meedenken!

20x SF170s + SMA SB3000TL-21 | PV Output

Pagina: 1