Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[php, curl] PHPSESSID opslaan in cookiejar

Pagina: 1
Acties:

  • pindamaster
  • Registratie: April 2010
  • Laatst online: 22-11 15:20
Hallo,

Ik ben nu al een tijdje aan het worstelen met het volgende probleem. Ik probeer via een php script een website uit te lezen. Nu moet ik hiervoor een form submitten, daarvoor moet ik eerst wat gegevens uit een andere pagina op dezelfde server ophalen. Deze gegevens veranderen per session.

Curlslaat wel de andere cookies op die die website genereerd, behalve de php sessid, is hier een instelling voor of is dit simpel gezegt niet mogelijk?

Een lange zoektocht op google leverde geen resultaten op.

Mijn twee curl request,
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
//eerste ophaal request,

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$path);
curl_setopt($ch, CURLOPT_FAILONERROR,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
$retValue = curl_exec($ch);          
curl_close($ch);
    

//tweede request met post, waarvoor de info van het eerste request nodig is.

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$postPath);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
    "element_id=$id&csrf=$code");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
$server_output = curl_exec ($ch);
curl_close ($ch);

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Ik zou een iets higher level library gebruiken, bijvoorbeeld Guzzle of de symfony browserkit. Dat scheelt geneuzel met low level dingen als dit.

Maar afgezien daarvan zou ik beginnen met gewoon kijken wat er in de cookiefile komt te staan na de request. Het is gewoon te lezen als plain text, waarschijnlijk. Als het de eerste request nog niet weggeschreven wordt, wordt het de tweede request ook niet geopend.

Je hebt kans dat de server ook de user agent controleert, en bots (zoals curl) niet accepteert. Je moet dan de useragent faken door daar even de useragent string van een willekeurige browser in te plakken.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz