User-Agent (UA), isteği başlatan istemci yazılımını — web tarayıcısı, mobil uygulama veya bot gibi — sunucuya tanıtan bir HTTP başlık alanıdır.
User-Agent nedir?
User-Agent dizesi, istemci isteklerinin HTTP başlıklarında yer alan karakteristik bir metin dizesidir. Temel amacı, sunucuya istemcinin türü, işletim sistemi, yazılım üreticisi ve/veya yazılım sürümü hakkında bilgi vermektir. Sunucular bu bilgiyi, ilgili istemciye optimize edilmiş içerik sunmak, istemci istatistiklerini kaydetmek veya erişim denetimi uygulamak için kullanabilir.
User-Agent dizesinin yapısı
Tek ve katı bir biçim bulunmasa da, User-Agent dizeleri genellikle belirli bir kalıbı izler: tarihsel nedenlerle çoğu zaman Mozilla/5.0 ile başlar, ardından platform ayrıntıları, işletim sistemi ve tarayıcı bilgileri gelir.
Örnek User-Agent dizesi:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Tipik bir User-Agent dizesinin çözümlenmesi:
Mozilla/5.0: Tarihsel bir token; Mozilla render motoruyla uyumluluğu belirtir. Modern tarayıcıların çoğu bunu uyumluluk için ekler.(Windows NT 10.0; Win64; x64): Platform bilgisi.Windows NT 10.0: İşletim sistemi (Windows 10).Win64: CPU mimarisi (64 bit Windows).x64: CPU mimarisi (64 bit işlemci).
AppleWebKit/537.36 (KHTML, like Gecko): Render motoru bilgisi.AppleWebKit/537.36: Chrome ve Safari'de yaygın olan AppleWebKit render motorunun kullanıldığını gösterir.KHTML, like Gecko: Diğer tarihsel uyumluluk token'ları. KHTML, WebKit'in temelini oluşturmuştu; Gecko ise Mozilla'nın motorudur.
Chrome/120.0.0.0: Tarayıcı kimliği ve sürümü.Safari/537.36: İkincil tarayıcı kimliği; Safari bekleyen sitelerle uyumluluk için Chrome tarafından sıkça eklenir.
User-Agent, HTTP isteklerinde nasıl çalışır
Bir istemci (örneğin bir web tarayıcısı veya bir betik) sunucuya HTTP isteği başlattığında çeşitli başlıklar ekler. Bunlardan biri de User-Agent başlığıdır.
- İstemci isteği: İstemci HTTP isteğini oluşturur ve
User-Agentbaşlığını varsayılan dizesiyle otomatik olarak doldurur. - Sunucunun isteği alması: Sunucu isteği alır ve
User-Agentdahil olmak üzere başlıkları ayrıştırır. - Sunucu tarafında işleme: Sunucu,
User-Agentdizesine bakarak şunları yapabilir:- Farklı içerik sunmak: Mobil tarayıcı User-Agent'ına sayfanın mobil için optimize edilmiş sürümünü, masaüstü tarayıcı User-Agent'ına ise masaüstü sürümünü göndermek.
- Özel stil/betik uygulamak: CSS veya JavaScript'i bilinen tarayıcı tuhaflıklarına göre uyarlamak.
- İstemci istatistiklerini kaydetmek: Tarayıcı kullanımını, işletim sistemi dağılımını ve bot etkinliğini izlemek.
- Güvenlik önlemleri uygulamak: Bilinen kötü amaçlı User-Agent'lardan veya otomatik scraping araçlarıyla ilişkilendirilen User-Agent'lardan gelen istekleri engellemek ya da doğrulamaya tabi tutmak.
- Yönlendirmek veya erişimi engellemek: Algılanan istemci türüne göre belirli kaynaklara erişimi reddetmek.
Proxy servislerinin rolü
Proxy servisi, istemci ile hedef sunucu arasında aracı görevi görür. İstemci bir istek proxy üzerinden gönderdiğinde, proxy isteği hedef sunucuya iletmeden önce User-Agent dizesi dahil HTTP başlıklarını yakalayıp değiştirebilir. Bu değişiklik, istemcinin sunucuya kendi orijinal kimliğinden farklı bir kimlik göstermesini sağlar.
User-Agent'ı neden değiştirmeli?
User-Agent dizesini değiştirmek, çoğu zaman proxy servisleriyle birlikte, çeşitli teknik senaryolarda yaygın bir uygulamadır.
1. Web scraping ve veri toplama
Sitelerden otomatik veri çıkarma işlemi, sıklıkla User-Agent dizelerini inceleyen anti-bot mekanizmalarıyla karşılaşır.
* Anti-bot tespitini aşmak: Birçok site, genel veya bilinen bot User-Agent'larından (örneğin Python-requests/2.25.1, curl/7.64.1) gelen istekleri tespit edip engeller. Gerçekçi tarayıcı User-Agent'larından oluşan bir havuzu rotasyona sokarak scraper'lar meşru kullanıcı trafiğini taklit edebilir; böylece tespit ve engellenme olasılığı azalır.
* Cihaza özgü verilere erişmek: Siteler mobil ve masaüstü tarayıcılara farklı içerik veya yapı sunabilir. User-Agent'ı değiştirmek, scraper'ın istediği mobil ya da masaüstü görünümünden veri istemesine ve toplamasına olanak tanır.
* Tutarlı veri elde etmek: Bazı A/B testi veya içerik kişiselleştirme sistemleri User-Agent'a dayanır. Tutarlı ve belirli bir User-Agent kullanmak, scraper'ın her zaman içeriğin aynı sürümünü almasını sağlayarak veri tutarlılığını destekler.
2. Test ve geliştirme
Geliştiriciler, kalite güvencesi ve hata ayıklama için User-Agent değişikliğinden yararlanır.
* Tarayıcılar/cihazlar arası uyumluluk testi: Geliştiriciler; farklı tarayıcıları (Chrome, Firefox, Safari), işletim sistemlerini (Windows, macOS, Linux) ve cihaz türlerini (masaüstü, tablet, mobil) simüle ederek bir sitenin veya uygulamanın çeşitli ortamlarda nasıl göründüğünü ve çalıştığını, birden fazla fiziksel cihaza veya sanal makineye ihtiyaç duymadan test edebilir.
* Tarayıcıya özgü sorunları ayıklamak: Bir hata yalnızca belirli bir tarayıcıda ortaya çıkıyorsa, User-Agent'ı değiştirmek geliştiricinin ortamı yeniden oluşturup sorunu ayıklamasına imkân verir.
* Mobil/masaüstü yönlendirmelerini test etmek: User-Agent'a dayalı sunucu tarafı yönlendirmelerin kullanıcıları sitenin doğru sürümüne yönlendirdiğini doğrulamak.
3. Gizlilik ve anonimlik
User-Agent'ı değiştirmek, çevrimiçi gizliliği artırmaya yönelik daha geniş bir stratejinin parçasıdır.
* Tarayıcı fingerprinting'ini azaltmak: User-Agent dizesi, sitelerin kullanıcıları izlemek için kullanabildiği benzersiz tarayıcı parmak izinin bileşenlerinden biridir. User-Agent'ları sık sık değiştirerek veya rastgeleleştirerek kullanıcılar, sitelerin bu başlığa dayalı kalıcı bir profil oluşturmasını zorlaştırır.
* İstemci ayrıntılarını gizlemek: Değiştirilmiş bir User-Agent, hedef sunucunun gerçek istemci yazılımını, işletim sistemini ve sürümünü doğru şekilde belirlemesini engeller ve böylece anonimliği artırır.
4. Erişim kısıtlamalarını aşmak
Sunucular, algıladıkları istemciye göre erişim denetimleri uygulayabilir.
* Coğrafi kısıtlamalı içerik (IP proxy'leriyle birlikte): User-Agent tek başına konumu değiştirmese de bazı servisler User-Agent kontrollerini IP konumuyla birleştirebilir. Gerçekçi bir User-Agent ile hedef bölgeden bir proxy IP'si birleştiğinde çok daha inandırıcı bir profil ortaya çıkar.
* Siteye özgü engelleme: Bazı siteler eski tarayıcı sürümlerini veya belirli bot User-Agent'larını engeller. User-Agent'ı güncel ve yaygın bir tarayıcıyla değiştirmek bu kısıtlamaları aşabilir.
* Mobil/masaüstü sürümlere erişmek: Bazı siteler User-Agent'a göre otomatik yönlendirme yapar. Açıkça mobil bir User-Agent ayarlamak, masaüstünde bile sitenin mobil sürümünü sunmasını sağlayabilir; tersi de geçerlidir.
5. Araştırma ve analitik
Araştırmacıların belirli kullanıcı ortamlarını simüle etmesi veya farklı koşullarda veri toplaması gerekebilir.
* Pazar araştırması: Sitelerin belirli cihaz veya tarayıcılara sahip kullanıcılara içeriği nasıl sunduğunu anlamak.
* Güvenlik araştırması: Web uygulamalarının, bozuk veya sıra dışı olanlar dahil çeşitli User-Agent dizelerine nasıl yanıt verdiğini analiz ederek olası güvenlik açıklarını belirlemek.
Proxy servisiyle User-Agent nasıl değiştirilir
Bir proxy servisi kullanıldığında, User-Agent başlığı istek hedef sunucuya ulaşmadan önce proxy düzeyinde değiştirilir. Böylece hedef sunucu, orijinal istemcinin User-Agent'ını değil yalnızca proxy'nin sağladığı User-Agent'ı görür.
1. HTTP/SOCKS5 proxy'leri (manuel başlık enjeksiyonu)
İstekleri yalnızca ileten proxy'lerde User-Agent başlığını istemci uygulamasının kendisi ayarlamalıdır. Proxy ise bu değiştirilmiş başlığı iletir.
Python requests kütüphanesiyle örnek:
import requests
target_url = "http://httpbin.org/user-agent" # User-Agent'ı geri döndüren bir servis
# İstenen User-Agent dizesini tanımla
custom_user_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1"
# Proxy bilgilerini tanımla
proxy_url = "http://user:[email protected]:port" # Kendi proxy bilgilerinizle değiştirin
# Özel User-Agent ile başlıkları hazırla
headers = {
"User-Agent": custom_user_agent
}
# proxies sözlüğünü hazırla
proxies = {
"http": proxy_url,
"https": proxy_url,
}
try:
response = requests.get(target_url, headers=headers, proxies=proxies, timeout=10)
response.raise_for_status() # Hatalı yanıtlar (4xx veya 5xx) için HTTPError fırlat
print("Response from target server:")
print(response.json())
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
Bu örnekte requests kütüphanesi, headers sözlüğünde belirtilen User-Agent başlığını gönderir. İstek daha sonra proxies sözlüğünde tanımlanan proxy üzerinden yönlendirilir. Hedef sunucu (httpbin.org), custom_user_agent dizesini alır.
2. Smart proxy'ler / proxy API'leri (otomatik yönetim)
Bazı gelişmiş proxy servisleri veya API'leri, yerleşik User-Agent yönetimi sunar: proxy'ye yapılan ilk istek dışında istemci tarafında ek yapılandırma gerekmeden User-Agent'ları otomatik olarak ayarlar veya rotasyona sokar.
- Başlık enjeksiyonu: Proxy servisi, istemci hiçbir User-Agent göndermediğinde belirli ya da rastgele bir User-Agent'ı otomatik eklemek veya istemcinin User-Agent'ını geçersiz kılmak için bir seçenek sunabilir.
- API parametreleri: Bazı proxy API'leri, istenen User-Agent'ın doğrudan API çağrısında parametre olarak belirtilmesine izin verir.
Kavramsal örnek (API tabanlı proxy):
import requests
# Varsayımsal bir proxy API uç noktası olduğunu varsayalım
proxy_api_url = "https://api.proxyprovider.com/request"
target_url = "http://httpbin.org/user-agent"
# Proxy API için parametreler
params = {
"targetUrl": target_url,
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"apiKey": "YOUR_API_KEY"
}
try:
response = requests.get(proxy_api_url, params=params, timeout=15)
response.raise_for_status()
print("Response from target server via proxy API:")
print(response.json())
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
Bu kavramsal senaryoda proxy servisi, API'sine iletilen userAgent parametresine göre User-Agent değişikliğini kendi içinde gerçekleştirir.
Yaygın User-Agent dizeleri ve en iyi uygulamalar
Uygun bir User-Agent seçmek, hedef sunucularla etkili etkileşim için kritik önemdedir.
Yaygın User-Agent kategorileri
| Kategori | Örnek User-Agent dizesi | Tipik kullanım senaryosu |
|---|---|---|
| Masaüstü Chrome | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 |
Genel web gezintisi simülasyonu, masaüstü için optimize edilmiş sitelerden veri kazıma. |
| Masaüstü Firefox | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/120.0 |
Genel web gezintisi simülasyonu, masaüstü için optimize edilmiş sitelerden veri kazıma, Firefox'a özgü render testleri. |
| Mobil Safari (iOS) | Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1 |
Mobil web scraping, sitenin mobil sürümlerini test etme, iOS cihaz trafiğini simüle etme. |
| Mobil Chrome (Android) | Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36 |
Mobil web scraping, sitenin mobil sürümlerini test etme, Android cihaz trafiğini simüle etme. |
| Genel bot | Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) |
SEO analizi, herkese açık içeriğin taranması (robots.txt kurallarına uyarak), arama motoru botu olarak tanınma. Özel olarak beyaz listeye alınmadıysa anti-bot sistemleri tarafından sıklıkla engellenir. |
| Minimal/özel | MyCustomScraper/1.0 |
Sunucuyla etkileşimin bilindiği ve izin verildiği özel bir uygulamayı tanıtmak veya dahili araçlar için. Yüksek engellenme riski nedeniyle herkese açık site scraping'i için genellikle uygun değildir. |
User-Agent yönetimi için en iyi uygulamalar
- Gerçekçi User-Agent'lar kullanın: Yaygın tarayıcıları ve işletim sistemlerini taklit edin. Herkese açık siteleri kazırken veya test ederken genel ya da boş User-Agent'lardan kaçının; bunlar sıklıkla bot olarak işaretlenir.
- User-Agent'ları rotasyona sokun: Otomatik görevlerde çeşitli User-Agent'lar arasında dönmek (örneğin farklı işletim sistemlerinde Chrome, Firefox ve Safari karışımı) trafiğin daha organik ve daha az öngörülebilir görünmesini sağlar.
- User-Agent'ları güncel tutun: Güncel tarayıcı sürümlerini kullanın. Eskimiş User-Agent'lar uyarı veya engellemeleri tetikleyebilir; çünkü eski ya da yamalanmamış bir sistemi veya tespitten kaçmaya çalışan bir botu işaret edebilirler.
- User-Agent'ı hedef içerikle eşleştirin: Sitenin mobil sürümünü hedefliyorsanız mobil bir User-Agent kullanın. Masaüstü sürümünü hedefliyorsanız masaüstü User-Agent'ı kullanın.
- IP rotasyonuyla birleştirin: Sağlam bir scraping veya erişim için User-Agent rotasyonu, proxy servisi üzerinden IP adresi rotasyonuyla birleştirilmelidir. Bu ikili yaklaşım, tespit ve engellenme olasılığını belirgin biçimde azaltır.
- Bozuk User-Agent'lardan kaçının: User-Agent dizelerinin sözdizimsel olarak doğru olduğundan ve meşru olanlara benzediğinden emin olun. Bozuk dizeler sunucuda ayrıştırma hatalarına yol açabilir veya isteği anında şüpheli olarak işaretleyebilir.
