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.
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:
explode(';',$parts[3])
daha sonra başka bir döngü işlemek için öneririm.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.