20 Mayıs 2012, 16:28 | #1 | |
Guest
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
| Php cURL Dersleri cURL Dersleri - Bölüm 1 - Giriş Php’de çoğu arkadaşımızın curl konusunda oldukça meraklı olduğunu görüyorum. Bu derslerle size dilim döndüğünce curl fonksiyonunu anlatmaya çalışacağım. Öncelikle curl ne işe yarar ona değinelim. Curl fonksiyonu ile file_get_contents gibi diğer sitelerin kaynak kodunu çekebilir, diğer sitelerden hostunuza dosya download edebilirsiniz. file_get_contents den farklı olarak istediğiniz siteye login olabilirsiniz, referrer, cookie ve useragent gibi bilgilerinizi değiştirebilirsiniz, yada isterseniz proxy ile bağlanabilirsiniz. Ayrıca file_get_contents e göre sunucuyu daha az yorar ve daha performanslıdır. Kullanımında temel olarak birkaç fonksiyon ile uygulanır. Onları öğrenelim önce curl_init() : curl oturumunu açar curl_setopt(): referrer, url, useragent, postdata gibi ayarların yapıldığı fonksiyon curl_exec(): bu fonksiyon yazılana kadar olan curl fonksiyonlarını işleme sokar ve gelen veriyi alır curl_close(): curl oturumunu kapatır Temel yapı ve kullanım sırası bu şekildedir. curl_init() oturumunu açtığımızda diğer fonksiyonlarda o oturum ile çalıştığımızı belirtmeliyiz. Yani; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Burada $ch değişkenimize bir oturum açtık, bundan sonraki işlemlerimizde bu oturum ile işlem yapacağız. Örneğin ref5 sitesine bağlanacaksak PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde olacak. Burada curl_setopt fonksiyonu ile curl de yapacağımız işlemleri belirtiyoruz. Kullanımı şu formattadır; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Üstte yazdığımız CURLOPT_URL işlemi, gidilecek url adresini belirtir. Diğer işlemleri ileriki derslerimde göstereceğim. En önemli kısım, curl_exec fonksiyonudur. Kullanımı şu şekilde; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Yani içine işlemler tanımladığımız oturumumuzu işleme sokar, ve işlem sonundaki verileri gösterir. Bu şekilde kullandığımızda aldığı verileri direk ekrana yazdırır. Bunu önlemek için gelen verileri bir değişkene almamız gerekir. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Bu şekilde gelen verileri $veri değişkenine aktardık. Daha sonra bu değişkende işimize yarayan kısımları ayıklayarak istediğimiz yerde kullanabiliriz. Son olarak geldik curl oturumumuzu kapatmaya. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde kodlamamızı bitiriyoruz. Toparlarsak, genel kullanıma örnek bir kodla özetleyelim; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
cURL Dersleri - Bölüm 2 - useragent ve referrer Bir siteden veri çekmek her zaman kolay olmayabilir, önlemler alınmış olabilir. Örneğin browser bilgisi var mı yok mu diye kontrol edip bazı acemi botları engelleyebilir. Peki bunu nasıl aşarız ? Önceki dersimizde bahsettiğimiz curl_setopt fonksiyonuna CURLOPT_USERAGENT değişkenini ekleyerek. Şöyle ki; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde yazarız. Burada benim vermiş olduğum useragent dizisi chrome a aittir. Şu adrese girerek browserınızın useragent bilgisini kısa yoldan alabilirsiniz. Ayrıca php deki $_SERVER['HTTP_USER_AGENT'] değişkeni ile de elde edebilirsiniz. Bu arada dilerseniz useragent i sabit yapmayabilirsiniz, şu şekilde ayarlayarak dosyayı açan kullanıcının useragent bilgisini botta kullanmış olursunuz. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Useragent engelini aştık, şimdi sıra referer engelinde. Referer nedir ? O dosyaya hangi adres aracılığıyla girildiği bilgisidir. Örneğin, benim [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] de kullanıcı giriş formum var diyelim, formum /giris.php ye gönderiyor olsun bilgileri. Ben giris.php dosyasında $_SERVER['HTTP_REFERER'] ile sadece [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] den gelenlerin giriş yapmasına izin veririm, diğer yerlerden girişi engellerim, böylece botlara karşı engel yaratırım. Ama tabiki bunu curl ile kolayca aşabiliriz. Çünkü referer bilgisi browser üzerinde oluşan bir bilgidir ve curl de istediğimizi ayarlayabildiğimiz bir browser gibidir. Bu referer bilgisi hotlink korumasını aşmamıza da yardımcı olur. Örneğin bir site resimlerinin sadece o sitede gösterilmesini sağlıyorsa, diğer sitelere koyunca hata resmi gösteriyorsa, referer bilgisinde kendi sitesinin adresini gönderdiğimizde bize hata göstermeyecektir. Bunu CURLOPT_REFERER değişkeni ile tanımlarız. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde kullanılır. cURL Dersleri - Bölüm 3 - returntransfer , header ve followlocation İlk dersimizde demiştik ki eğer curl_exec($ch) fonksiyonunu bir değişkene atamazsak yani şöyle $veri = curl_exec($ch); değil de curl_exec($ch); yazarsak direk ekrana yazar gelen verileri. Bunu istersek kapatabiliriz. Onun için; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
İşlemini tanımlarız. 1 veya true yazarsak ekrana basmaz, 0 veya false yazarsak ekrana basar. Header ise girdiğimiz url den bize dönen header bilgilerini gelen veriye eklememizi sağlar. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Yine 1 ve true yazılırsa açılır, 0 ve false yazılırsa kapanır. Header nedir ? Browsera giden komutlardır, yönlendirme, cookie vs gibi. Genelde http kodu için kullanılır 200 ok mi 403 forbidden mi 404 not found mı 301 moved mi ona bakmak için. Örnek: PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Çıktısı: Kod: Kodu kopyalamak için üzerine çift tıklayın!
Followlocation ise header da gelen yönlendirmeleri takip etme seçeneğidir. Üstteki örnekte gördüğünüz gibi girdiğim linki location ile ref5.net e yönlendirmiş. Ben tekrar CURLOPT_URL tanımlayıp oraya girebilirim ama bunu otomatik yapmak varken neden uğraşalım. Şu şekilde ayarladığımızda; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Kısaltılmış linkimizi açıp bizi otomatik ref5.net’e yönlendirecek, ardından ref5 in kaynak kodunu bize getirecektir. Bu sadece kısa linklerde değil form girişlerinde de çok işimize yarayacak. Çünkü diyelim login formu dolduruyorsunuz, size sadece hesap.php ye yönlendirme kodu veriyorsa kaynak kodunuz boş görünecek, followlocation tanımladığınızda hesap.php ye de ulaşıp onun kodlarını döndürecek size. cURL Dersleri - Bölüm 4 - timeout ve proxy Timeout, zaman aşımı anlamına gelir. Yani curl fonksiyonumuz belli bir süre içinde tamamlanmazsa, siteden cevap gelmezse yani, oturumumuzu otomatik kapatır ve dosyamızda gereksiz bekleme yaratmamış olur. Bu kesinlikle dosyanın tamamını etkileyen bir timeout değildir, sadece o oturum içindeki süreyi kapsar, yani dosyanın geri kalan kodları çalışmaya aynen devam eder, die() komutu gibi değildir. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde tanımlanır. Burada belirtilen 5 değeri saniye cinsindendir. Yani 5sn içinde cevap gelmez ise karşıdan, curl oturumu kapatılacaktır. Özellikle birazdan göstereceğim proxy ile birlikte kullanmanızda yarar var, çünkü çalışmayan proxylerde fonksiyon uzun beklemelere girebilir, bunları timeout ile otomatik kapatabilirsiniz. Proxy bağlandığımız sitede ip adresimizin gizlenmesine (farklı görünmesine) yardımcı olur. Proxy kullanmak için ise 2 değişkenimiz var, biri proxy ip sini yazdığımız CURLOPT_PROXY değişkeni, diğeri de proxynin portunu yazdığımız CURLOPT_PROXYPORT değişkeni. Önce güncel bir proxy bulmamız lazım, örnek olarak şu adresten edinebilirsiniz anlık olarak. Proxymizi aldıktan sonra şu şekilde uyguluyoruz; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Sanıldığının aksine kullanılması son derece kolaydır. Örnek olarak ip adresimizi gösteren bir siteye bağlanıp test edebiliriz bunu ; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Burada timeout 5 verdim ki 5sn den geç tepki veren ip adresini otomatik kapatsın diye. Bu proxy işlemlerini değişken ile uygularsak, döngüye sokup timeout ile sağlam olanlarını da ayıklayabiliriz. Sizin yaratıcılığınıza kalmış artık gerisi. cURL Dersleri - Bölüm 5 - post ve get metoduyla form gönderme Önceki derslerimizde hep karşıdan veri çekmeyi gördük, bu dersimizde ise siteye veri göndereceğiz. Gönderilecek veri için iki metodumuz var, biri GET diğeri ise POST dur. GET kısaca url özerinden açık bir şekilde gönderilir (örneğin; site.com/index.php?id=123 gibi), POST ise genellikle form doldurmada (üyelik giriş formu, mesaj gönderme formu vb.) uygulanan gizli veri gönderimidir. İlk önce GET veri gönderimine bir örnek verelim, gayet basittir kullanımı; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Gördüğünüz gibi URL işlemininde sitenin sonuna “?” den sonra uyguluyoruz ve her değişkenin arasına & işaretini koyuyoruz. Şu şekilde de yazılabilir; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Tamamen size kalmış, uzatmıyorum. POST metodunu kullanabilmek bu kadar basit değildir, işin içine gizli değişkenler de girebiliyor çoğu zaman. Örnek formlar ile açıklayacağım bunu. İlk formumuz; Formun bulunduğu adres: [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] olsun Kod: Kodu kopyalamak için üzerine çift tıklayın!
Bize ilk lazım olan şey, formun nereye gönderildiği. Bunu action dan öğreniyoruz, yani giris.php imiş. O zaman curlopt_url değişkeni giris.php ye gidecek. Daha sonra inputlara bakıyoruz. 3 tane input var. Bunların name değerlerini alacağız. user, pass ve giris değişkenleriymiş. giris değişkeninin değeri (value) “Tamam” olarak verilmiş dikkat edin. Şimdi curl ile nasıl göndereceğimize bakalım; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde olur. Yani CURLOPT_POST ile post tipinde veri göndereceğimizi belirtiyoruz, ardından CURLOPT_POSTFIELDS ile değişkenlerimizi yazıyoruz aralarına & koyarak. Post değişkenlerini isterseniz dizi olarak da gönderebilirsiniz. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde kullanabilirsiniz. Dizi ile göndermenin daha kullanışlı olduğunu söyleyebilirim. Bir başka form örneği; Kod: Kodu kopyalamak için üzerine çift tıklayın!
Burada action ile get verisi de tanımlanmış. Onu ne yapıyoruz ? Hemen url kısmına ekliyoruz. Ardından inputlara bakıyoruz. Type hiç önemli değil, eğer name değeri atandıysa o değişken gidiyor demektir. Bu formda bir guvenlik adında gizli değişken var. Onu da göndereceğiz. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Bu kadar basit. Yalnız dikkat edilmesi gereken birşey var, botları engellemek için koyulan bu gizli guvenlik değişkenleri sadece o oturumda geçerli olacaktır. Bunun için curl oturumunu kapatmadan önce siteye bağlanıp veriyi çekmeli, ardından guvenlik değişkenini bulup almalı, ondan sonra formun verilerini göndermeliyiz. Örnek kullanım; PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Bir oturum içinde istediğimiz kadar curl_exec fonksiyonu kullanabiliriz. Bu arada sadece input değil form içindeki textarea lar da form ile gider, özellikle mesaj bölümleri textarea ile verilir. Örnek; Kod: Kodu kopyalamak için üzerine çift tıklayın!
Gibi bir textarea varsa name de yazan mesaj değişkenini de post ile göndermemiz gerekir. cURL Dersleri - Bölüm 6 - cookies ve ssl Curl ile https yani ssl sertifikalı sayfalara bağlanmak için en kestirme yol aşağıdaki gibidir. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Bu ayarı yapınca ssl doğrulamasını kapatmış oluyoruz ve önümüzdeki engel kalkmış oluyor, CURLOPT_URL kısmına https:// şeklinde url mizi yazıp işlemlerimize devam ediyoruz. Gelelim cookie olayına. Bazı botlarda sitelere login olmamız gerekiyor. Ve bildiğiniz gibi giriş yaparken “beni hatırla” kutucukları vardır. Onları seçince size bir cookie verir, o cookie sizin browserınızda olduğu sürece siteye girdiğinizde login olmuş kabul eder sizi, tekrar tekrar login olmazsınız. Curl ile de aynı şeyi yapacağız. Bunun için biz cookie dosyamız olacak, cookie bilgilerimiz içine kaydedilecek, gerektiğinde oradan okunacak. O dosyamız cookie.txt olsun. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde kullanılır. Buradaki CURLOPT_COOKIEJAR bize curl oturumumuz kapatıldığında bize gelen cookie değerlerinin kaydedileceği dosyayı belirtir, CURLOPT_COOKIEFILE ise oturumda göndereceğimiz cookie değerlerinin olduğu dosyayı belirtir. İkisini de aynı dosyaya tanımlamak en kullanışlı olan ayardır. Bu cookie dosyası sayesinde siteye bir kere login olduğumuzda, tekrar login olmaya gerek kalmadan site içinde dolaşabileceğiz. Sadece dosya ile değil, istersek cookie değerlerini elle de girebiliriz. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
Gördüğünüz gibi CURLOPT_COOKIE işlemine cookie_ismi=cookie_degeri şeklinde cookie değişkenlerimizi araya ; koyarak yazıyoruz. Bu kadar basit. Genel anlamda işimize yarayacak curl kodları bu şekilde. İşinize yarayanı seçip kullanmak size kalıyor | |
|
Etiketler |
curl, dersleri, detaylarıyla, php, tüm |
Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| |
Benzer Konular | ||||
Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
Barbell Wrist Curl | Sarya | Sözlük | 0 | 21 Nisan 2022 10:21 |
php curl türkçe karakter sorunu çözülmüştür | hAte | PHP | 0 | 17 Ekim 2014 16:05 |
American Curl Kedisi, American Curl Kedisinin Özellikleri | Violent | Evcil Kediler | 0 | 08 Mart 2014 21:44 |
GW | cURL Nedir ? Ne İşe Yarar ? cURL e Giriş | cURL İle Post İşlemleri | SeckiN | PHP | 0 | 19 Ağustos 2013 22:33 |