file_get_contents Çerezleri almak

5 Cevap php

Bir file_get_contents isteği yaparken uzak sunucu tarafından belirlenen çerez almak mümkün mü?

Ben bir http isteği yapmak ve çerezleri saklamak ve ikinci bir istek yapmak için php gerekir.

5 Cevap

Eğer cURL for that purpose, cURL bir dosyaya çerezleri kaydetmek ve sonraki isteği (ler) için onları yeniden izin çerez kavanoz adında bir özelliği uygulamak kullanmalısınız.

Burada hızlı bir kod bunu nasıl parçası, mikroişlemciyi gelir:

/* STEP 1. let’s create a cookie file */
$ckfile = tempnam ("/tmp", "CURLCOOKIE");
/* STEP 2. visit the homepage to set the cookie properly */
$ch = curl_init ("http://somedomain.com/");
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec ($ch);

/* STEP 3. visit cookiepage.php */
$ch = curl_init ("http://somedomain.com/cookiepage.php");
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec ($ch);

note: Eğer pecl uzantısı (ya da PHP derlenmiş) yüklü olmalıdır veya cURL API erişimi olmayacaktır unutulmamalıdır.

Ben bu geç, farkında, ama en azından sunucu tarafından gönderilen bireysel çerez almak için bir yol aslında var.

Ben size? Izle http isteği haddeleme almak için tüm stream_create_context iş yapmak için biliyorum varsayarak yaşıyorum ve aslında sadece çerez ayarı yardıma ihtiyacım var.

Bir url üzerinde file_get_contents çalıştırdıktan sonra, (ne yazık ki, non-ilişkisel) dizi $ http_response_header ayarlanır.

Sunucu bir çerez geri gönderiyorsa, bunlardan biri ile başlayacak 'Set-Cookie:' Eğer substr ile ayıklamak hangi.

Ancak, şu anda, benim için o bir görünür can yalnızca erişim tek-Set-Cookie Ben şu anda geçici bir çözüm için bir yol bulmaya çalışıyorum bir sınırlama olduğunu, bu değişken aracılığıyla.

Laereom cevabı takiben, burada birden fazla çerez almak için nasıl:

$cookies=array();
foreach($http_response_header as $s){
    if(preg_match('|^Set-Cookie:\s*([^=]+)=([^;]+);(.+)$|',$s,$parts))
        $cookies[$parts[1]]=$parts[2];
    }

NOTLAR:

  1. Ben regex ile liberal değilim; Eğer daha kesin olmak istiyorsanız RFC çalışma (yani kötü oluşturulan çerez verilerini reddetmek için)
  2. Sen yol = $ yerlerinde vb =, sona bulacaksınız [3]. Bu öznitelikler için sabit bir düzen varsa ben emin değilim çünkü ben (explode(';',$parts[3]) daha sonra başka bir döngü işlemek için öneririm.
  3. Iki çerezler doğru gibi görünen aynı adı kısmını, sadece son hayatta kalır, varsa. (Ben mevcut projede bu durum için ne, ben ben ekran kazıma kulüpler sitesinde bir hata olduğunu varsayalım.)

Yüklemek ve PECL extension for HTTP kullanmak veya php kurulum isteğe curl library ile derlenmiş emin olun ya.

Ben co Zend_Http nesne ile oldukça kolay yapmak inanıyorum. Burada bir istek adding cookies ile ilgili belgelerdir.

(Otomatik inanıyorum alınır) bir istek çerezleri olsun sadece Zend_Http nesne üzerinde getCookieJar() kullanın.

Bu uygulanması kolay olmalı; Ancak, php manuel how to deal with cookies using the http stream, bir kullanıcı yorumu var.