Konular

Curl(client Url Library Functions) Nedir?

Curl ile kullanıcı kontrolü nasıl yapılır?

CURL, ( Client URL Library Functions)

Daniel Stenberg tarafından yazılan bu PHP kütüphanesi, birçok farklı tipteki sunucunun, birçok farklı tipte protokol kullanarak birbirleriyle bağlantı ve iletişim kurabilmesini sağlamaktadır. Desteklenen protokoller ise http, https, ftp, gopher, telnet, dict, file, ve ldap protokolleridir.PHP 4.0.2. versiyonundan sonra PHP’ye eklenmiştir. Basit bir örnek vermek gerekirse cURL ile bir sitenin ana sayfasını HTML dosyası olarak sunucunuza kaydedebilirsiniz. Bununla beraber bu web sitesindeki ilgili sayfaya birden çok değişkeni POST metodu ile gönderebilirsiniz. Curl kütüphanesiyle upload/download, GET/POST işlemleri, çerez ve proxy yollama işlemleri, kullanıcı, şifre onaylama sayfaları(auth.) yapılabilir.

curl_init() : Yeni bir curl oturumu başlatır.
curl_setopt() : Curl transferi için seçenekleri parametreler halinde kullanmaya yarar.
curl_exec() : curl_setopt() ile belirlenmiş seçenekleri işler ve transfer işlemini yapar.
curl_close() : Daha önceden curl_init ile açılmış curl oturumunu kapatır.
curl_getinfo() : Yapılan curl işlemi hakkında çeşitli bilgilere ulaşmak için kullanılır.

CURL’un kullanımına basit bir örnek verelim

Sitemizin dışındaki farklı bir sunucuda bulunduğu iddia edilen bir kullanıcının varlığının doğrulanmasının gerektiğini varsayalım. Kullanıcıdan üye olduğunu iddia ettği sistemin kullanıcı adı ve şifresini aldıktan sonra aşağıdaki fonksiyon ile bunu kontrol edebilirsiniz;

    function kullaniciyiKontrolEt($kul_adi,$sifre) {

            $site = “http://hedef_url.php”;
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL,$site);
            curl_setopt($ch,CURLOPT_REFERER,$site);
            curl_setopt($ch, CURLOPT_POSTFIELDS,“Kul_adi=$kul_adi&Sifre=$sifre”);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $ha=curl_exec($ch);
            $pos = strpos($ha, “Gecersiz Tekrar Deneyin”);
            curl_close($ch);
            return $pos;
    }
 
 
 

Burada, karşı sistemin kullanıcı adı ve şifreyi kontrol ettiğini bildiğimiz URL, $site değişkeninde tanımlanmaktadır. curl_init() fonksiyonu ile yeni bir oturum başlatılıyor ve curl_setopt() fonksiyonunda kullanılmak üzere bir tanıtıcı değer (handle) döndürülüyor. Daha sonra CURL aktarım işlemlerinde kullanılacak Öntanımlı Sabitler curl_setopt() fonksiyonu ile tek tek tanımlanıyor ve curl_exec() fonksiyonu ile CURL oturumunda tanımlanan Öntanımlı Sabitlere göre işlem gerçekleştiriliyor. Bu işlem sonucunda hedef URL’den bir HTML dosyası dönüyor. Burada fonksiyon geri dönen dosya içerisinde “Geçersiz Tekrar Deneyin” gibi kullanıcının varolmadığı durumlarda karşılaşılabilecek bir ifadeyi strpos() fonksiyonu ile arıyor. Bu arama işlemi sonucunda $pos değişkenine true yada false değeri atanıyor ve en son adımda fonsiyondan geri döndürülüyor. Elbette burada tanımlanan POST edilecek değişken adeti ve ve adları karşı sisteme göre değişiklik gösterecektir.

    $site = “http://hedef_url.php”;
    curl_setopt($ch, CURLOPT_POSTFIELDS,“Kul_adi=$kul_adi&Sifre=$sifre”);
    $pos = strpos($ha, “Gecersiz Tekrar Deneyin”);

satırlarındaki değerleri kendinize göre düzenleyerek sizde farklı bir sistemdeki kullanıcının var olup olmadığını doğrulayabilirsiniz.

Bir Başka Örnek
 

    // Curl oturum baslatiliyor.
    $ch = curl_init();
    // URL
    curl_setopt($ch, CURLOPT_URL, "http://www.xhandros.net/bl/index.php");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch); // ekrana basiliyor
    curl_close($ch); // sunucu hafizasindan siliniyor

Bu kod URL içeriğini sayfaya basacaktır. curl_init ile yeni bir oturum başlatıldı, setopt ile transfer seçenekleri tanımlandı, işlem yapıldı ve curl_close ile hafızadan silindi. curl_setopt içindeki header parametresi sayfa çıktısını almak için gerekli. Url parametresi ise çıktısı alınacak adresi temsil ediyor. curl_init("$adres"); şeklinde yapılma imkanıda mevcut.

CURL ile localde olmayan bir sunucuya POST olarak veri gönderelim:

 
    $ch = curl_init(); // oturum baslat
    // POST adresi
    curl_setopt($ch, CURLOPT_URL,"http://www.site.com/test.php");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,"isim=ahmet&soyad=yilmaz");
    curl_exec ($ch);
    curl_close ($ch);

 

POSTFIELDS seçeneğinde, normalde nasıl GET ile browser üzerinden veri yolluyorsak aynı şekilde yolluyoruz. Bu şekilde üyelik isteyen sitelere otomatik olarak üyelikler açılabilir. (foreach yardımıyla). Çeşitli log sistemlerinde kullanılabilir. Mesela yazıp, sattığınız sistemlerin nerelerde kullanıldığını loglamak için kendi sunucunuza nerede kullanıldığına ait çeşitli bilgiler yollayabilirsiniz.

curl ile sockets kütüphanesinde olduğu gibi sahte isteklerde yollamak mümkündür. Örneğin; referer bilgisini istediğimiz şekilde değiştirip istek gönderebiliriz.

 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,"http://localhost/test.php");
    curl_setopt($ch,CURLOPT_REFERER,"ceviz.net");
    curl_exec ($ch);
    curl_close ($ch);

 

  CURLOPT_REFERER parametresini istediğimiz şekilde değiştirdik :-) Bu şekilde ".htaccess" ile yapılan korumalarda aşılabiliyor. Diğer sayfada öğrendiklerimizle birkaç CURLOPT parametresi ekleyip bir dosya indirme fonksiyonu yazalım. 

<?php

function dosya_indir($adres, $ad) {
    if (!extension_loaded(curl)) {
        die("Extension yuklu degil socket deneyebilirsin");
    }
    $ch = curl_init("$adres");
    if (!$ch) {
        die("Curl oturumu baslatamadim..");
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    curl_close($ch);
   
    //baglantiyi kapa

    $islem = fopen("$ad", "a+");
    fwrite($islem, $data);
    fclose($islem);
    if ($islem) {
        echo" Dosya basariyla yuklendi...";
    } else {
        die("Dosya yuklenemedi");
    }
}

// Örnek kullanim
// dosya_indir('http://www.ceviz.net/yns.rar','yns.rar');
// 1. kisim yuklenecek URL , 2. kisim server'a yuklendigi zamanki dosya adi
?>
  Şimdi gelelim sistemin nasıl işlediğine ;

İlk once curl'un yüklü olup olmadığına bakılıyor, eğer yüklü değilse hata mesajı veriliyor. Curl işlemi başlatıldıktan sonra CURLOPT_RETURNTRANSFER seçeneğiyle curl_exec()'ten dönen dener sayfaya çıktı olarak verilmez, tanımlandığı değişkende, örnekte $data tutulur. $data değişkenine adres'in bilgileri alındıktan sonra dosya yazma işlemi fonksiyonları ile sunucuda yeni dosya oluşturulur. Sonra dosya indirme işlemi tamamlanır. Eğer bu işlemi local olmayan sunucunuzda yaparsanız çok büyük dosyaları çok az bir zamanda çekebileceğinizi görebilirsiniz.

Ben yaptığım testlerde saniyede 400 kb civarı çekiyordum :-) İşleme curl_Getinfo altında CURLINFO_SPEED_DOWNLOAD parametresi eklerseniz download hızını ölçebilirsiniz.
 
$dlhizi = curl_getInfo($ch,"CURLINFO_SPEED_DOWNLOAD")
 
Tüm bu fonksiyonun yaptığını *nix curl'u ilede yapabilirsiniz. Örneğin;
 
system("curl -o dosyaadi.rar http://www.ceviz.net/dosyaadi.rar ");

aynı işi görecektir. Ama system, passthru gibi komutlar güvenlik nedeniyle genelde yasaklıdır.

Bir Dizi Bilgisini Curl ile POST Etmek İçin

 

<?php

$post = [
    'username' => 'user1',
    'password' => 'passuser1',
    'gender'   => 1,
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.domain.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
$response = curl_exec($ch);
var_export($response);

?>

 

Kaynak:

 

Yorumunuzu Ekleyin

Kurallı İfadeler (regex Engine)

Bir regex'in gerçekte nasıl çalıştığını bilmek daha efektif çalışan regex ifadeleri oluşturmamızı ve regex'leri daha isabetli oluşturmamızı sağlar. Bu yazımızda oluşturduğunuz regex ifadelerinin neden beklediğiniz sonuçları vermediğini ve umduğunuz eşleşmeleri yerine getirmediğini öğreneceksiniz. Bu da bizim tabir yerindeyse daha az kafa patlatmamızı ve daha az zaman harcamamızı sağlayacaktır.

41,771 Okunma 1 Yorum 14/07/2007 05:23:11

Nesneye Yönelimli Php

Classlarla ilgili ingilizce bir makale

34,833 Okunma Henüz yorum yapılmamış 06/01/2008 11:24:59

PHP ile PDF dosya oluşturmak

Php ile yeni bir pdf dosyası oluşturmak : Öncelikle php ile pdf işlemleri yapmak için bir pdf kütüphanesine ihtiyacınız olacak

33,421 Okunma Henüz yorum yapılmamış 06/09/2007 01:22:38

PHP nedir?

HTML kodlarının arasına yerleştirilmiş php kodlarından ayrıştırıp işleyerek sonuçta saf HTML formatında bir çıktı üretmek ve Web sunucusuna iletmektir.

32,621 Okunma Henüz yorum yapılmamış 26/09/2011 14:50:52

$_FILES

Örnek kod ve açıklamalar

32,098 Okunma 4 Yorum 30/12/2007 13:36:25

Oop - Nesne Yönelimli Programlama

Artık ister istemez her programcının bulaştığı bu teknik hakkında sayısız makale yazılmıştır bu güne kadar. Bu makale de onlardan biri

26,278 Okunma 1 Yorum 06/01/2008 11:26:55

$_SERVER

$_SERVER host bilgileri, header bilgileri, yollar ve script yolları gibi bilgileri içeren bir dizidir. Bu dizideki değerler web server tarafından üretilir. Tüm server yazılımlarının, tüm değerleri atayacağına dair bir kesinlik yoktur. Yazılım bazılarını atamayabilir, veyahut burada anlatılacak değerlerin haricinde değerler ekleyebilir

25,923 Okunma Henüz yorum yapılmamış 23/10/2007 00:51:55

Php ile Oturum Yönetimi (SESSION)

Türkçesi oturum anlamına gelen session bilgilerin saklanması için kullanılan mantıksal bir nesnedir.Session oturum yönetimini kullanarak şifreli sayfalar oluşturarak ve bu sayfaları belirlediğiniz kullanıcıların görmesini sağlayabilirsiniz.

25,912 Okunma Henüz yorum yapılmamış 22/05/2013 16:29:40 22/05/2013 16:29:55

Xampp Kurulumu

Xampp apache, mysql, php ve phpmyadmin için kolay ve basit kurulum sağlayan bir uygulamadır.

25,045 Okunma Henüz yorum yapılmamış 19/12/2011 10:00:36

Verileri doğrulamak için PHP ile filtreleme işlemleri

Ziyaretçilerden gelen verilerin istediğimiz formata uygunluğunu kontrol etmeliyiz ki, güvenlik açığı yaratmayalım. E-postaları, web adreslerini, bilgi girişlerini ve dahasını Her birine uygun farklı fonksiyonlar yazıldı bu vakte kadar. Ancak PHP 5.2.0 ve üstü sürümlerde bu fonksiyonlara gereksinim azaldı. Çünkü PHP filtreleme fonksiyonları standart oldu.

24,343 Okunma Henüz yorum yapılmamış 02/12/2008 04:19:24

Php İle Excel Dosyası Oluşturmak

Genelde, herhangi bir biçimlendirme söz konusu olmadığında, veritabanındaki bir bilgiyi ya da başka bir tabloyu excel ortamına aktarmak için csv yöntemini kullanırım. Bu yöntem herkesin bildiği gibi, her sütunu tab ya da noktalı virgül gibi bir karakterle ve her satırı da enter karakteri ile bölmekten ibaret. Ama biçimlendirme söz konusu olduğunda, mesela sütunlara bir genişlik vermek, yazıları bold yapmak, bazı hücreleri sayı ya da para tipine çevirmek gibi biçimlendirmelerde bu yöntem işe yaramamakta.

24,045 Okunma 1 Yorum 22/07/2008 01:35:17

$_ENV

23,924 Okunma Henüz yorum yapılmamış 31/12/2007 09:46:00

En iyi 25 php template motoru

Php tabanlı web siteleri dizayn ederken, php kodlarını html kodlar arasına gömeriz. Fakat gün gelir bu kodları düzenlemek istediğimizde çok büyük bir çaba gerektirir. Bu tarz durumlarla başa çıkabilmek için ve daha kararlı bir sistem kodlamak için tema sistemleri geliştirebilirsiniz. Tema sistemi ya da motorlarının asıl amacı, php kodları ile html kodlarını birbirinden ayırmaktır. Böylece hangi kod üzerinde değişiklik yapmanız gerekiyorsa, kendisine ait dosyalarını açarak bu işlemi gerçekleştirebilirsiniz

23,574 Okunma Henüz yorum yapılmamış 16/02/2008 01:35:10

Php Mysql to XML

Bu yapıyı geliştirerek mysql veritabanınızdaki datalarınızı xml standartlarına dönüştürebilirsiniz.

23,255 Okunma Henüz yorum yapılmamış 05/10/2008 01:56:47

Dizi Tanımlamaları

PHP’de array tanımlayıcısını kullanarak içerisinde elemanları yerleştirmek yoluyla ya da index numarasını köşeli parantezler içerisinde belirterek atama yaparak dizi oluşturmak mümkündür

23,041 Okunma Henüz yorum yapılmamış 23/10/2007 00:36:18

Harici Dosya İnclude

İnclude kullanımı ve örnekler

22,892 Okunma Henüz yorum yapılmamış 14/04/2008 01:42:12

$_REQUEST

$_GET, $_POST, ve $_COOKIE değişkenlerini içeriğinden meydana gelen çağrışımlı bir dizidir. Bu değişken bir superglobal olduğu için tüm alanlarda (scope) geçerlidir ve bundan dolayıdır ki global $_REQUEST ; şeklinde bir tanımlamaya ihtiyaç duymaz. Eğer register_globals değişkeni php. İni de ayarlanmışsa bu değişken her yerde (Global Scope) kullanılabilir

21,628 Okunma Henüz yorum yapılmamış 24/12/2007 00:16:58

if Kullanımı

19,694 Okunma Henüz yorum yapılmamış 09/04/2012 10:31:35 20/09/2014 18:01:36

Php Regular Expression

İngilizce bir makaledir.

19,468 Okunma Henüz yorum yapılmamış 27/03/2008 13:38:11

Yükleniyor...