Cloudflare Workers ile IP Geolocation API Nasıl Yapılır?

Cloudflare workers kullanarak bir ziyaretçinin IP bilgisi üzerinden konum bilgisini alabiliriz zaman zaman bu bilgiye ihtiyacımız olur. Bu işi yapan pek çok servis var ancak fiyatları oldukça yüksek. Gelin Cloudflare ile ücretsiz bir şekilde kendi servisimizi oluşturalım, 100k isteği geçiyorsanız aylık 5$ ödeyerek kullandığınız paketi de yükseltebilirsiniz diğer servislerin ücretlendirmesine baktığımız zaman oldukça uyguna gelecek.

Cloudflare Workers’da Servis Nasıl Oluşturulur?

Cloudflare hesabınıza giriş yapıktan hemen sonra sol menüde yer alan “Workers” > “Overview” > “Create a Service” diyoruz.

cloudflare workers create services, cloudflare create apiPin

Oluşturacağımız servisin adını giriyoruz daha sonra tipini seçiyoruz, bu örnekte “HTTP handler” seçin ve “Create service” tuşuna basın.

cloudflare worker servis oluşturmaPin

Worker Nasıl Düzenlenir?

Başarılı bir şekilde servisimizi oluşturduk, şimdi direk olarak sağda yer alan “Quick Edit” tıklayın.

cloudflare workers quick edit, cloudflare worker services edit, cloudflare servicesPin

Solda kod düzenleme, ortada istek atabileceğiniz bir alan ve sağda ön izleme alanı sizi karşılayacak. Sol taraftaki alana kodumuzu ekliyoruz. “Save and deploy” dediğimiz andan itibaren web sitemiz erişilebilir hale geliyor.

cloudflare workers edit code, cloudflare http handler examplePin

Kullanacağımız javascript kodumuz çok basit bir şekilde IP adresinin geolocation bilgilerini verecek ve şu şekilde olacak daha fazla sonuç almak isterseniz resmi cloudflare worker belgelendirmesine göz atabilirsiniz, kullanabileceğiniz oldukça fazla değer bulunuyor.

{
  "asn": 47524,
  "as_organization": "Turksat",
  "city": "Ankara",
  "country": "TR",
  "timezone": "Europe/Istanbul",
  "ip_address": "94.46.141.209"
}

Kullanacağımız kodumuz ise şu şekilde

addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request));
})

async function handleRequest(request) {
    const data = JSON.stringify({
        asn: request.cf.asn,
        as_organization: request.cf.asOrganization,
        city: request.cf.city,
        country: request.cf.country,
        timezone: request.cf.timezone,
        ip_address: request.headers.get("CF-Connecting-IP")
    }, null, 2);

    return new Response(data, {
        headers: {
            "Access-Control-Allow-Origin": "*",
            "Content-Type": "application/json;charset=UTF-8"
        }
    })
}

Sonuç olarak belirli bir isteğe kadar kullanabileceğimiz Geolocation servisimiz hazır hale geliyor. Servisimizden bir örnek https://geolocation.mertcan.workers.dev/ adresini ziyaret edebilirsiniz.

Ayrıca servis işlemlerinde cronjob çalıştırabilirsiniz CloudFlare Workers Kullanarak Harici Cronjob İşlerinin Yapılması ile detaylarını öğrenebilirsiniz.

Sistem Uzmanı, Linux Hacısı, El-Kernel

“Cloudflare Workers ile IP Geolocation API Nasıl Yapılır?” üzerine 4 yorum

  1. Merhaba, bunun nasıl bir API sağladığını gerçekten anlamadım.

    Yalnızca, worker adresimize isteği gönderen kullanıcıya ait bilgileri görebiliyoruz. Back-end tarafında API’ye herhangi bir IP adresi gönderip ona göre bir yanıt alma şansımız yok sanıyorum.

    Gözden kaçırdığım bir nokta mı var?

    Yanıtla
    • Merhaba

      Doğrudur, burada kurguladığımız yöntem bize istek atılması şeklinde böylece esneklik sağlamış oluyoruz. Back-end tarafından gönderilecek bir istekte yapılabilir ama CloudFlare worker bunu doğrudan desteklemiyor. Çevresinden dolaşmak gerekiyor ve o noktada devreye cookie giriyor. Yapmak istemediğimiz bir yöntem buda.

      Front-end taraflı ipgeoloc çözümleri için bu yöntemi kullanabilirsiniz.

  2. Merhaba Mertcan öncelikle içerik için teşekkürler. Workers ile Cloudflare bilinen zararlı botlardan ayıran bir sistem mevcut mudur?

    Yanıtla
    • Merhaba

      Maalesef CloudFlare direk olarak böyle bir yöntemi sunmuyor, ancak Enterprise olan sürüm kullanılırsa belirli oranda veri paylaşıyor. Diğer detaylı olanları ise satış ekibi ile görüşüp kullanılan paketlere dahil ettirmek gerekiyor diye biliyorum.

Yorum yapın