pillinetwork hesabınızla giriş yapın.

Curl ile Birden Fazla Kaynaktan Veri Çekmek

Curl ile veri çekmek daha önce bu yazıda ele alınmıştı. Tek bir yerden veri çekmek için bu yöntem uygun olsa da eğer birden fazla yerden veri çekmek isityorsak uygulamamızın hızlı çalışması için curl_multi fonksiyonlarını kullanmamız gerek. Bu şekilde eğer bir veri çekmek 2 sn sürüyorsa ve biz 6 yerden veri çekiyorsak toplam süre 12 sn değil 2 sn olacaktır.

Örnek fonksiyon şöyle yazılabilir:

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
function coklu_istek($veri)
{
$curlle = array();
$sonuc = array();
$yer_tutucu = curl_multi_init();
foreach ($veri as $id => $d) {
$curlle[$id] = curl_init();
$url = is_array($d) ? $d['url'] : $d;
curl_setopt($curlle[$id], CURLOPT_URL, $url);
curl_setopt($curlle[$id], CURLOPT_HEADER, 0);
curl_setopt($curlle[$id], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlle[$id], CURLOPT_USERAGENT,
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4");
curl_setopt($curlle[$id], CURLOPT_ENCODING, "");
curl_setopt($curlle[$id], CURLOPT_AUTOREFERER, 1);
curl_setopt($curlle[$id], CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curlle[$id], CURLOPT_TIMEOUT, 10);
curl_setopt($curlle[$id], CURLOPT_MAXREDIRS, 2);
curl_multi_add_handle($yer_tutucu, $curlle[$id]);
}
$aktif= null;
do {
curl_multi_exec($yer_tutucu, $aktif);
} while ($aktif> 0);
foreach ($curlle as $id => $c) {
$sonuc[$id] = curl_multi_getcontent($c);
curl_multi_remove_handle($yer_tutucu, $c);
}
curl_multi_close($yer_tutucu);
return $sonuc;
}

Kısaca ne yaptığımızı açıklarsak:

  • Önce yer_tutucu ile bir curl_multi yaratıyoruz
  • Sonra veri değiskeninin array olup olmadığına bakıyoruz array ise url leri tek tek içinden alıyoruz
  • Her bir bağlantı için curl seçeneklerini tanımlıyoruz. (user-agent, max redirection gibi)
  • Bunları yer tutucuya bağlıyoruz
  • Sonra tum oluşturduğumuz bağlantıları çalıştırıyoruz
  • Sonuçları alıyoruz ve yer_tutucuları kapatıyoruz.

Şimdi bu fonksiyonu bir örnekle kullanalım:

1
2
3
$urller = array('http://www.asitesi.com',http://www.bsitesi.com',http://www.csitesi.com');
$gelen_veri=coklu_istek($urller);

Php yazılımcısı değilim kuvvetli olduğum alan .Net o nedenle yazarken hata yapmış olabilirim veya gereksiz yerler olabilir.

/* Etiketler: , , */
/* iwontsmoke yazdı. 31 Aralık 2008 19:15. 5 yorum var */

Yorumlar

faydalı bir makale olmuş, teşekkürler.

Bu arada kod içinde bir yerde browser kimliği gördüm. Veri çekilen kaynağa kendini firefox 3.0 gibi tanıtıyor. Yalancı bir kod ama yine de browser kimliğinin her zaman doğru konuşmadığı gerçeğini vurguladığı için bu da güzel bir örnek. Tekrar teşekkürler. (ben bile yeni öğrendim bunu:))

/* if life="" then call BatsinBuDunya() */

https li bi adresten bilgi cekmem gerek

sitenin kendi authentication sayfasi var, yani bi login page .
submit buttonu ile gidiyor , bakiyor , hersey ok ise giris yapiyor sonrasindaki hersey https den geliyor.

boyle bir durumda nasil bir yol izlenir.

/* nilux was here. */

@nilux o zaman curl ile önce login olacaksın sayfaya. sayfa https olduğu için

curl_setopt($sessions, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($sessions, CURLOPT_SSL_VERIFYHOST, 2);

curl değerlerine bu parametrelerini de ekelemelisin. site login olurken cookie kullanacağı için

curl_setopt($sessions,CURLOPT_COOKIEJAR, dirname(__FILE__).'/cerez.txt'); curl_setopt($sessions, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cerez.txt');

parametreleri ile de çerez bilgilerini txt dosyasına yazdıracaksın. login olduktan sonra bilgileri çekmek için kullancağın her curl fonksiyonunda

curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cerez.txt');

parametresiyle kaydettiğin çerezi çağırıp öyle işlem yapacaksın.

tesekkurler cok guzel olmus

Farklı bir bakış açısı! Aklıma gelmemişti doğrusu...

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

İlgili Yazılar

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork