PHP scraping cookie nodig

Pagina: 1
Acties:

  • Icewind
  • Registratie: Oktober 2004
  • Laatst online: 21-02-2024
Beste Tweakers,

Ik ben bezig met het maken van een website maar omdat ik niet heel handig ben met PHP heb ik een kennis ingeschakeld om een PHP-script voor mij te maken. Het doel is om wekelijks bepaalde gegevens van een website te scrapen. Ik probeer zo duidelijk mogelijk te zijn maar ik ben geen expert dus hopelijk ben ik niet te vaag oid.

Het gehele script is wat lang maar het probleemgebied zit hier:

curl_setopt_array($curl, array(
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://www.google.com',
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
CURLOPT_HTTPHEADER => array(
'accept-encoding: sdch, br',
'accept-language: en-US,en;q=0.8',
'upgrade-insecure-requests: 1',
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'cache-control: max-age=0',
'authority: www.google.com',
'cookie: DEZE COOKIE WERKT NIET AUTOMATISCH',
'referer: https://www.google.com'
)

(het is niet echt www.google.com maar dit is voor het bericht ingevuld). Ik probeer dus m.b.v. een latere str_get_html via de Simple HTML DOM de HTML code te verkrijgen.

De variabel "cookie" bij CURLOPT_HTTPHEADER is het probleem. Ik kan via Google Chrome>F12 in console via document.cookie de juiste cookie krijgen, maar het idee van de script is dat hij op een andere server draaait en geheel automatisch deze script (via een cronjob oid) uitvoert.

Hoe kan ik deze cookie variabel geautomatiseerd verkrijgen in de script? Handmatig werkt dus wel maar dat is niet echt de bedoeling. Ik hop dat jullie hier iets van kunnen maken.

Vriendelijke groeten,

Icewind

[ Voor 8% gewijzigd door Icewind op 17-09-2016 13:06 ]


  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Wat zijn de response headers dan?

Maak je niet druk, dat doet de compressor maar


  • Icewind
  • Registratie: Oktober 2004
  • Laatst online: 21-02-2024
De website is whoscored.com, en als ik document.cookie gebruik in de browser krijg ik een string zoals:

visid_incap_774904=TRoA9JnnRbS277P2CjayrosTrlcAAAAAQkIPAAAAAACAE992AdTy0kHvBrIa76Q+Oog724nW1jjs; whoscored.com-agreedtocookies=true; incap_ses_275_774904=rf0YSYgtXXBqSTm4MgDRA+M73VcAAAAAR8vQ8ZmkuQShl/9lRH+z3Q==

Die werkt prima in de script..echter als ik (via een knip/plak scriptje van het internet) de headers verkrijg via php krijg iets als:

6 => string 'Set-Cookie: visid_incap_774904=sxB2Mn3nSWSA7Bd8vpuvywc93VcAAAAAQUIPAAAAAADTzWaUnvGpZzVaBy7ptksz; expires=Sun, 17 Sep 2017 06:46:42 GMT; path=/; Domain=.whoscored.com' (length=165)
7 => string 'Set-Cookie: incap_ses_275_774904=lIY0Cuq59lEPmjq4MgDRAwc93VcAAAAAD94BEnM/U/IOEDJtiasz9Q==; path=/; Domain=.whoscored.com' (length=120)


Als ik de twee beetje creatief samengooit en er uiteindelijk dan:

visid_incap_774904=sxB2Mn3nSWSA7Bd8vpuvywc93VcAAAAAQUIPAAAAAADTzWaUnvGpZzVaBy7ptksz; whoscored.com-agreedtocookies=true; incap_ses_275_774904=lIY0Cuq59lEPmjq4MgDRAwc93VcAAAAAD94BEnM/U/IOEDJtiasz9Q==

van maak, werkt hij niet. Waarschijnlijk omdat hij het gedeelte +Oog724nW1jjs (of de variant die bij de cookie via PHP hoort) mist? Ik weet het niet zo goed tbh.

Ter referentie: het gaat uiteindelijk om, bijv, een pagina als: https://www.whoscored.com...16-2017-Las-Palmas-Malaga

  • TheDevilOnLine
  • Registratie: December 2012
  • Laatst online: 06-06 22:54
to handle correctly cookies between different curl session, the you have to do something like this:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php 
       $ch = curl_init(); 
       curl_setopt ($ch, CURLOPT_URL, $url); 
       curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookies.txt"); 
       curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 

       curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
       $result = curl_exec ($ch); 
       curl_close($ch); 
       return $result; 
?> 
Bron: http://php.net/curl_setopt (luca dot manzo at bbsitalia dot com - 10 years ago)

De cookies van een call die je maakt worden opgeslagen in het bestand dat je bij CURLOPT_COOKIEJAR instelt, de cookies worden gelezen uit het bestand dat bij CURLOPT_COOKIEFILE staat. Door deze dus het zelfde in te stellen, zorg je ervoor dat je cookies met elke call behouden blijven.

  • Icewind
  • Registratie: Oktober 2004
  • Laatst online: 21-02-2024
Ik snap het niet echt;( Waarom werkt iets ogenschijnlijks simpels als:

$url = 'https://www.whoscored.com';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookies.txt");

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close($ch);
return $result;

niet?

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

Icewind schreef op zaterdag 17 september 2016 @ 18:50:
Ik snap het niet echt;( Waarom werkt iets ogenschijnlijks simpels als:

$url = 'https://www.whoscored.com';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookies.txt");

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close($ch);
return $result;

niet?
Serieus? :? Geef ons tenminste eens iets van informatie in plaats van "het werkt niet" 8)7

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


  • Icewind
  • Registratie: Oktober 2004
  • Laatst online: 21-02-2024
Mijn excuses! Om dit te testen heb ik een WAMP server (nogmaals, ik ben geen expert:-)) draaien om lokaal dingen te testen. PHP/apache e.d. draaien prima maar als ik de onderstaand script draai gebeurt er niks.

Het volledige bestand (voor testdoeleinden) is:

<?php
$url = 'https://www.whoscored.com';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookies.txt");

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close($ch);
return $result;
?>

Als curl, php newbie: Ik zou verwachten dat: $url is goed ingesteld, curl_init initialiseert de curl sessie CURLOPT_COOKIEJAR en CURLOPT_COOKIEFILE geven aan waar de geschreven /opgeslagen zijn en vervolgens wordt de sessie afgesloten en zou ik verwachten dat de gevonden cookie is opgeslagen in de aanwezige cookies.txt (aanwezig in /www). Sorry voor enige verwarring en/simpele vraag maar ik hoop dat ik iets eenvoudigd over het hoofd zie.

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

PHP:
1
return $result


Dat doet ook niks omdat je niks naar de browser stuurt. Vervang return door dit en je zal op zijn minst wat te zien krijgen:

PHP:
1
var_dump($result);

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Dan moet cURL wel geïnstalleerd zijn.

Het kan ook zo: http://www.php.net/manual...ple-fetch-ignore-redirect
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$context = stream_context_create(array(
  'http'=>array(
    'method'=>"GET",
    'max_redirects' => '0',
    'ignore_errors' => '1'
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
));

$stream = fopen('https://www.whoscored.com/', 'r', false, $context);

// header information as well as meta data
// about the stream
var_dump(stream_get_meta_data($stream));

// actual data at $url
var_dump(stream_get_contents($stream));
fclose($stream);

Maak je niet druk, dat doet de compressor maar


  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

Als curl niet geïnstalleerd is dan krijg je wel een melding (mits error_reporting aan staat), afaik is curl gewoon beschikbaar met een WAMP/XAMP installatie.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Icewind
  • Registratie: Oktober 2004
  • Laatst online: 21-02-2024
Beste tweakers,

Bedankt voor de hulp. Ik heb het probleem gevonden door, zoals geadviseerd, var_dump($result); te gebruiken, dit gaf aan:

60
SSL certificate problem: unable to get local issuer certificate

Vervolgens heb ik curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
gebruikt om hier langs tekomen en hij haalt nu de gehele pagina op. Dit ingevoerd in het script en alles lijkt te werken.
Pagina: 1