[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-tr-colly-doner-proxy-rehberi":3},{"success":4,"payload":5,"related":61,"errors":155},true,{"id":6,"slug":7,"title":8,"excerpt":9,"body_html":10,"meta_title":11,"meta_description":12,"canonical_url":13,"canonical_override":14,"og_title":15,"og_description":16,"og_image_url":17,"faq_json":18,"key_takeaways":14,"allow_index":28,"noindex_google_only":28,"allow_follow":4,"published_at":29,"updated_at":29,"content_updated_at":30,"featured_image_url":31,"featured_image_alt":32,"card_image_url":33,"reading_time_minutes":34,"author":35,"categories":39,"tags":46,"alternates":47,"locale_paths":59,"views":60},175,"colly-doner-proxy-rehberi","Colly'de Döner Proxy Kullanımı: Go ile Üretim Seviyesinde Web Scraping","Go'nun Colly çerçevesinde döner proxy'leri idiomatik şekilde nasıl entegre edeceğinizi öğrenin. Collector modeli, RoundRobinProxySwitcher, residential IP rotasyonu ve üretim desenlerini kapsayan geliştirici odaklı rehber.","\u003Cp>Go ekosisteminde web scraping yapmak istediğinizde Colly, en hızlı ve en çok benimsenen çerçevelerden biridir. Ancak hedef siteler Cloudflare, PerimeterX veya Datadome gibi anti-bot duvarlarına sahip olduğunda, tek bir IP'den binlerce istek göndermek dakikalar içinde engellenmenize yol açar. İşte Colly'de döner proxy konusunun kritik olduğu nokta burasıdır: Her istekte IP değiştirmek, rate limitlerini aşmak ve engellenmeden ölçeklenmek için temel bir gerekliliktir.\u003C\u002Fp>\n\u003Cp>Bu rehber, Colly'nin collector modelini, proxy yüzeyini ve residential IP rotasyonunu üretim seviyesinde nasıl kullanacağınızı adım adım anlatır. Ayrıca ProxyHat'ın \u003Ccode>gate.proxyhat.com:8080\u003C\u002Fcode> gateway'i ile nasıl entegre edileceğini gösteren çalıştırılabilir Go örnekleri içerir.\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Yasal Uyarı:\u003C\u002Fstrong> Bu rehber yalnızca herkese açık verilerin toplanması içindir. CFAA ve \u003Ca href=\"https:\u002F\u002Fgdpr-info.eu\u002F\" rel=\"noopener noreferrer\">GDPR\u003C\u002Fa> kapsamında, bir sitenin Hizmet Şartları'nı ihlal eden veya kişisel verileri izinsiz toplayan scraping faaliyetleri yasa dışı olabilir. Her zaman \u003Ccode>robots.txt\u003C\u002Fcode> kurallarına ve sitenin rate limit politikalarına saygı gösterin.\u003C\u002Fp>\u003C\u002Fblockquote>\n\n\u003Ch2>Colly'de Döner Proxy: Temel Mekanizma\u003C\u002Fh2>\n\u003Cp>Colly, Go'nun \u003Ccode>net\u002Fhttp\u003C\u002Fcode> paketi üzerine inşa edilmiş, event-driven bir scraping çerçevesidir. Her HTTP isteği bir \u003Ccode>Collector\u003C\u002Fcode> üzerinden geçer ve proxy'ler \u003Ccode>SetProxyFunc\u003C\u002Fcode> metodu ile istek seviyesinde enjekte edilir. Bu, her istek için farklı bir çıkış IP'si kullanmanıza olanak tanır.\u003C\u002Fp>\n\u003Cp>Colly'nin proxy sistemi iki temel bileşenden oluşur:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Built-in RoundRobinProxySwitcher:\u003C\u002Fstrong> Verilen proxy listesinde sırayla dolaşır.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom proxy function:\u003C\u002Fstrong> \u003Ccode>func(*http.Request) (*url.URL, error)\u003C\u002Fcode> imzasına sahip herhangi bir fonksiyon — kendi rotasyon mantığınızı yazmanız için tam esneklik sağlar.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Her iki yaklaşım da HTTP, HTTPS ve SOCKS5 protokollerini destekler. Residential proxy'ler ile birleştiğinde, her istek farklı bir ISP'den geldiği için hedef site IP tabanlı engellemeleri zor uygular.\u003C\u002Fp>\n\n\u003Ch2>Colly Collector Modeli ve Callback Mimarisi\u003C\u002Fh2>\n\u003Cp>Colly'nin çekirdeği \u003Ccode>Collector\u003C\u002Fcode> struct'ıdır. Bir collector, HTTP isteklerinin yaşam döngüsünü yönetir ve üç ana callback zincirine sahiptir:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>OnRequest:\u003C\u002Fstrong> İstek gönderilmeden önce çağrılır. Header'ları değiştirebilir, proxy'yi ayarlayabilirsiniz.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>OnHTML:\u003C\u002Fstrong> Yanıt alındıktan sonra, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FPuerkitoBio\u002Fgoquery\" rel=\"noopener noreferrer\">goquery\u003C\u002Fa> tabanlı DOM traversali ile CSS selector'lere göre elementleri yakalar.\u003C\u002Fli>\n\u003Cli>OnError: İstek başarısız olduğunda çağrılır — retry mantığı burada kurulur.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Colly varsayılan olarak asenkron modda çalışabilir. \u003Ccode>c.Async = true\u003C\u002Fcode> ayarı ile istekler goroutine'lerde paralel yürütülür. Bu, yüksek throughput gerektiren senaryolarda kritiktir, ancak paylaşılan state yönetimini zorlaştırır. Colly, bunun için \u003Ccode>sync.Mutex\u003C\u002Fcode> veya channel tabanlı desenler önerir.\u003C\u002Fp>\n\u003Cp>goquery, jQuery benzeri bir API sunar ve Colly'nin \u003Ccode>OnHTML\u003C\u002Fcode> callback'inde \u003Ccode>*goquery.Selection\u003C\u002Fcode> olarak expose edilir. Bu sayede CSS selector'lerle DOM'da gezinmek, attribute'ları çekmek ve iç içe sorgular yazmak oldukça doğaldır.\u003C\u002Fp>\n\n\u003Ch2>Proxy Yüzeyi: RoundRobinProxySwitcher ve Custom Proxy Func\u003C\u002Fh2>\n\u003Cp>Colly'nin \u003Ccode>proxy\u003C\u002Fcode> paketi, hazır bir round-robin switcher sunar. Bu switcher, verilen proxy URL listesinde sırayla dolaşır ve her istekte bir sonrakini seçer.\u003C\u002Fp>\n\u003Ch3>RoundRobinProxySwitcher ile Basit Rotasyon\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>package main\n\nimport (\n    &quot;fmt&quot;\n    &quot;log&quot;\n    &quot;github.com\u002Fgocolly\u002Fcolly\u002Fv2&quot;\n    &quot;github.com\u002Fgocolly\u002Fcolly\u002Fv2\u002Fproxy&quot;\n)\n\nfunc main() {\n    c := colly.NewCollector()\n\n    \u002F\u002F ProxyHat residential proxy URL&apos;leri\n    proxies := []*url.URL{\n        url.Parse(&quot;http:\u002F\u002Fuser-country-DE-sid-s1:pass@gate.proxyhat.com:8080&quot;),\n        url.Parse(&quot;http:\u002F\u002Fuser-country-US-sid-s2:pass@gate.proxyhat.com:8080&quot;),\n        url.Parse(&quot;http:\u002F\u002Fuser-country-GB-sid-s3:pass@gate.proxyhat.com:8080&quot;),\n    }\n\n    switcher, err := proxy.RoundRobinProxySwitcher(proxies...)\n    if err != nil {\n        log.Fatal(err)\n    }\n    c.SetProxyFunc(switcher)\n\n    c.OnHTML(&quot;title&quot;, func(e *colly.HTMLElement) {\n        fmt.Println(&quot;Title:&quot;, e.Text)\n    })\n\n    c.Visit(&quot;https:\u002F\u002Fexample.com&quot;)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Custom Proxy Func ile Gelişmiş Rotasyon\u003C\u002Fh3>\n\u003Cp>Round-robin yeterli olmadığında — örneğin her istekte rastgele bir ülke seçmek veya başarısız proxy'leri geçici olarak devre dışı bırakmak istediğinizde — kendi \u003Ccode>func(*http.Request) (*url.URL, error)\u003C\u002Fcode> fonksiyonunuzu yazabilirsiniz.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>func customProxySwitcher(proxies []*url.URL) colly.ProxyFunc {\n    var idx int\n    var mu sync.Mutex\n    return func(r *http.Request) (*url.URL, error) {\n        mu.Lock()\n        defer mu.Unlock()\n        p := proxies[idx%len(proxies)]\n        idx++\n        return p, nil\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Bu desen, IP rotasyonunu tamamen kontrol altına almanızı sağlar. Örneğin, her isteğe benzersiz bir \u003Ccode>sid-ID\u003C\u002Fcode> atayarak sticky session davranışı taklit edebilir veya belirli bir ülke için IP havuzu oluşturabilirsiniz.\u003C\u002Fp>\n\n\u003Ch2>Neden Residential IP'ler Gerekli?\u003C\u002Fh2>\n\u003Cp>Datacenter IP'leri, ASN (Autonomous System Number) bazlı tespit sistemlerinde kolayca flag'lenir. Cloudflare ve benzeri WAF sağlayıcıları, datacenter IP bloklarını bilinen bot trafik kaynakları olarak sınıflandırır. Residential IP'ler ise gerçek ISP'lerden (Deutsche Telekom, Comcast, Vodafone vb.) tahsis edildiği için normal kullanıcı trafiğinden ayırt edilmesi çok daha zordur.\u003C\u002Fp>\n\u003Cp>ProxyHat'ın residential proxy servisinde, kullanıcı adı içinde ülke, şehir ve session parametreleri belirtebilirsiniz:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>user-country-DE:pass\u003C\u002Fcode> — Almanya çıkış IP'si\u003C\u002Fli>\n\u003Cli>\u003Ccode>user-country-DE-region-state_of_berlin-city-berlin:pass\u003C\u002Fcode> — Berlin şehir seviyesinde hedefleme\u003C\u002Fli>\n\u003Cli>\u003Ccode>user-sid-abc123:pass\u003C\u002Fcode> — Aynı session ID ile aynı IP'yi koruyun (sticky session)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Bu parametreleri her istekte değiştirerek, coğrafi dağılımı kontrol edebilir ve aynı IP'den çok fazla istek gitmesini engelleyebilirsiniz.\u003C\u002Fp>\n\n\u003Ch2>Çalıştırılabilir Go Örneği: Residential Proxy ile Collector\u003C\u002Fh2>\n\u003Cp>Aşağıdaki örnek, ProxyHat residential proxy'leri ile çalışan, rate limit'li ve paralel istek yapan bir Colly collector'ıdır:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>package main\n\nimport (\n    &quot;fmt&quot;\n    &quot;log&quot;\n    &quot;math\u002Frand&quot;\n    &quot;net\u002Fhttp&quot;\n    &quot;net\u002Furl&quot;\n    &quot;sync&quot;\n    &quot;time&quot;\n\n    &quot;github.com\u002Fgocolly\u002Fcolly\u002Fv2&quot;\n    &quot;github.com\u002Fgocolly\u002Fcolly\u002Fv2\u002Fproxy&quot;\n)\n\nfunc main() {\n    c := colly.NewCollector(\n        colly.MaxDepth(2),\n        colly.UserAgent(&quot;Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64)&quot;),\n    )\n\n    \u002F\u002F ProxyHat residential proxy URL listesi\n    countries := []string{&quot;DE&quot;, &quot;US&quot;, &quot;GB&quot;, &quot;FR&quot;, &quot;JP&quot;}\n    var proxies []*url.URL\n    for _, cc := range countries {\n        u, _ := url.Parse(fmt.Sprintf(\n            &quot;http:\u002F\u002Fuser-country-%s-sid-%d:YOUR_PASSWORD@gate.proxyhat.com:8080&quot;,\n            cc, rand.Intn(10000),\n        ))\n        proxies = append(proxies, u)\n    }\n\n    switcher, err := proxy.RoundRobinProxySwitcher(proxies...)\n    if err != nil {\n        log.Fatal(err)\n    }\n    c.SetProxyFunc(switcher)\n\n    \u002F\u002F Rate limiting: paralellik ve gecikme\n    c.Limit(&amp;colly.LimitRule{\n        DomainGlob:  &quot;*&quot;,\n        Parallelism: 10,\n        Delay:       2 * time.Second,\n        RandomDelay: 1 * time.Second,\n    })\n\n    var mu sync.Mutex\n    var results []string\n\n    c.OnHTML(&quot;h1&quot;, func(e *colly.HTMLElement) {\n        mu.Lock()\n        results = append(results, e.Text)\n        mu.Unlock()\n    })\n\n    c.OnError(func(r *colly.Response, err error) {\n        log.Printf(&quot;Hata: %s — status: %d&quot;, err, r.StatusCode)\n    })\n\n    targets := []string{\n        &quot;https:\u002F\u002Fexample.com&quot;,\n        &quot;https:\u002F\u002Fexample.org&quot;,\n        &quot;https:\u002F\u002Fexample.net&quot;,\n    }\n\n    for _, t := range targets {\n        c.Visit(t)\n    }\n\n    c.Wait() \u002F\u002F Asenkron modda tüm goroutine&apos;lerin bitmesini bekle\n\n    for _, r := range results {\n        fmt.Println(&quot;Bulundu:&quot;, r)\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Bu örnekte dikkat edilmesi gereken noktalar:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Parallelism: 10 — Aynı anda en fazla 10 istek yürütülür.\u003C\u002Fli>\n\u003Cli>Delay + RandomDelay — Her istek arasında 2 saniye sabit + 0–1 saniye rastgele gecikme eklenir. Bu, trafiğin bot benzeri düzgünlüğünü kırar.\u003C\u002Fli>\n\u003Cli>Session ID — Her ülke için rastgele bir session ID üretilir, böylece aynı IP tekrar tekrar kullanılmaz.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Üretim Desenleri: Retry, Clone, Transport ve Dağıtık Scraping\u003C\u002Fh2>\n\u003Ch3>Retry Mantığı: c.Clone() ile Yeniden Deneme\u003C\u002Fh3>\n\u003Cp>Colly'de retry yapmak için \u003Ccode>OnError\u003C\u002Fcode> callback'inde \u003Ccode>c.Clone()\u003C\u002Fcode> kullanarak collector'ın bir kopyasını oluşturabilir ve aynı URL'i tekrar ziyaret edebilirsiniz. Clone, proxy ayarlarını ve callback'leri kopyalar, ancak shared state'i kopyalamaz.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>retryCount := make(map[string]int)\nvar retryMu sync.Mutex\n\nmaxRetries := 3\n\nc.OnError(func(r *colly.Response, err error) {\n    retryMu.Lock()\n    n := retryCount[r.Request.URL.String()]\n    retryCount[r.Request.URL.String()] = n + 1\n    retryMu.Unlock()\n\n    if n &lt; maxRetries {\n        time.Sleep(time.Duration(n+1) * 2 * time.Second) \u002F\u002F Exponential backoff\n        r.Request.Retry()\n    }\n})\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Custom Transport ile TLS Fingerprint Yönetimi\u003C\u002Fh3>\n\u003Cp>Bazı anti-bot sistemleri TLS handshake fingerprint'ini kontrol eder. Colly, varsayılan \u003Ccode>http.Transport\u003C\u002Fcode>'ı özelleştirmenize olanak tanır:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>c.WithTransport(&amp;http.Transport{\n    TLSClientConfig: &amp;tls.Config{\n        InsecureSkipVerify: false,\n        MinVersion:         tls.VersionTLS12,\n        CipherSuites: []uint16{\n            tls.TLS_AES_128_GCM_SHA256,\n            tls.TLS_AES_256_GCM_SHA384,\n            tls.TLS_CHACHA20_POLY1305_SHA256,\n        },\n    },\n    MaxIdleConns:        100,\n    IdleConnTimeout:     90 * time.Second,\n    DisableCompression:  false,\n})\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Dağıtık Scraping: Redis Storage Backend\u003C\u002Fh3>\n\u003Cp>Tek bir makine 500–1000 RPS'i geçtiğinde bottleneck olur. Colly, ziyaret edilen URL'leri paylaşmak için Redis ve SQLite storage backend'leri sunar. Birden fazla Colly instance'ı aynı Redis'e bağlanarak URL queue'yu paylaşabilir ve duplicate ziyaretleri önleyebilir.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>storage := &amp;storage.Redis{\n    Address:  &quot;redis:\u002F\u002Flocalhost:6379&quot;,\n    Prefix:   &quot;colly_scraper_&quot;,\n}\nc.SetStorage(storage)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Bu desen, Kubernetes pod'ları veya Docker container'ları arasında yatay ölçeklenme sağlar. Her pod, Redis'ten bir URL alır, işler ve sonucu ortak bir depoya yazar. ProxyHat'ın \u003Ca href=\"\u002Ftr\u002Flocations\">proxy lokasyonları\u003C\u002Fa> ile birleştiğinde, her pod farklı bir bölgeden trafik gönderebilir.\u003C\u002Fp>\n\n\u003Ch2>Proxy Tipleri Karşılaştırması\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Özellik\u003C\u002Fth>\n\u003Cth>Datacenter Proxy\u003C\u002Fth>\n\u003Cth>Residential Proxy\u003C\u002Fth>\n\u003Cth>Mobile Proxy\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Tespit Zorluğu\u003C\u002Ftd>\n\u003Ctd>Düşük (ASN tespiti kolay)\u003C\u002Ftd>\n\u003Ctd>Yüksek (gerçek ISP)\u003C\u002Ftd>\n\u003Ctd>Çok Yüksek\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Hız \u002F Latency\u003C\u002Ftd>\n\u003Ctd>~50ms\u003C\u002Ftd>\n\u003Ctd>~200–500ms\u003C\u002Ftd>\n\u003Ctd>~300–800ms\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Fiyat (yaklaşık)\u003C\u002Ftd>\n\u003Ctd>$0.50\u002FGB\u003C\u002Ftd>\n\u003Ctd>$2–5\u002FGB\u003C\u002Ftd>\n\u003Ctd>$5–15\u002FGB\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Anti-bot Bypass\u003C\u002Ftd>\n\u003Ctd>Düşük başarı oranı\u003C\u002Ftd>\n\u003Ctd>%90+ başarı\u003C\u002Ftd>\n\u003Ctd>%95+ başarı\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Uygun Senaryo\u003C\u002Ftd>\n\u003Ctd>API scraping, basit siteler\u003C\u002Ftd>\n\u003Ctd>SERP, e-ticaret, sosyal medya\u003C\u002Ftd>\n\u003Ctd>Sosyal medya, sıkı anti-bot\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Ch2>Colly Ne Zaman Kullanılmamalı?\u003C\u002Fh2>\n\u003Cp>Colly, HTTP istek-yanıt modeline dayanır. Eğer hedef site bir JavaScript SPA'sı ise (React, Vue, Angular) ve içerik client-side rendering ile geliyorsa, Colly'nin \u003Ccode>OnHTML\u003C\u002Fcode> callback'i boş bir DOM görecektir. Bu durumda \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fchromedp\u002Fchromedp\" rel=\"noopener noreferrer\">chromedp\u003C\u002Fa> veya Playwright gibi headless browser çözümleri daha uygundur.\u003C\u002Fp>\n\u003Cp>Yine de Colly, headless browser fleet'leri ile birlikte kullanılabilir: Colly URL keşfi ve queue yönetimi için, chromedp ise rendering için. Bu hibrit yaklaşım, hem hız hem de rendering kapasitesi sağlar.\u003C\u002Fp>\n\n\u003Ch2>Etik ve Yasal Hususlar\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Yalnızca herkese açık verileri toplayın. Login arkasındaki verilere erişmek CFAA ihlali olabilir.\u003C\u002Fli>\n\u003Cli>\u003Ccode>robots.txt\u003C\u002Fcode> dosyasını kontrol edin ve \u003Ccode>Disallow\u003C\u002Fcode> kurallarına uyun.\u003C\u002Fli>\n\u003Cli>GDPR kapsamında, AB vatandaşlarına ait kişisel verileri izinsiz toplamak ağır para cezalarına yol açabilir (en fazla €20 milyon veya global cironın %4'ü).\u003C\u002Fli>\n\u003Cli>Rate limitlere saygı gösterin — saniyede 100 istek göndermek bir siteyi DoS'a uğratabilir.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Key Takeaways\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Colly'de döner proxy, \u003Ccode>SetProxyFunc\u003C\u002Fcode> ile istek seviyesinde uygulanır; \u003Ccode>RoundRobinProxySwitcher\u003C\u002Fcode> veya custom \u003Ccode>func(*http.Request) (*url.URL, error)\u003C\u002Fcode> kullanılabilir.\u003C\u002Fli>\n\u003Cli>Residential proxy'ler, datacenter IP'lerine göre %90+ daha yüksek başarı oranı sunar ve anti-bot sistemlerinde tespit edilmesi çok daha zordur.\u003C\u002Fli>\n\u003Cli>ProxyHat kullanıcı adında \u003Ccode>-country-DE-region-state_of_berlin-city-berlin\u003C\u002Fcode> ve \u003Ccode>-sid-abc123\u003C\u002Fcode> parametreleri ile her isteği coğrafi olarak yönlendirebilirsiniz.\u003C\u002Fli>\n\u003Cli>\u003Ccode>Limit()\u003C\u002Fcode> kuralları ile Parallelism ve RandomDelay ayarlamak, bot tespitini zorlaştırır.\u003C\u002Fli>\n\u003Cli>Dağıtık scraping için Redis storage backend kullanın ve birden fazla pod\u002Fcontainer arasında URL queue paylaşın.\u003C\u002Fli>\n\u003Cli>JS-heavy SPA'ler için Colly tek başına yeterli değildir; chromedp ile hibrit bir yaklaşım düşünün.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>ProxyHat'ın residential proxy servisi ile Colly entegrasyonu hakkında daha fazla bilgi için \u003Ca href=\"\u002Ftr\u002Fpricing\">fiyatlandırma sayfamızı\u003C\u002Fa> inceleyin veya \u003Ca href=\"\u002Ftr\u002Fuse-cases\u002Fweb-scraping\">web scraping kullanım senaryolarımıza\u003C\u002Fa> göz atın. SERP takibi için özel çözümlerimizi \u003Ca href=\"\u002Ftr\u002Fuse-cases\u002Fserp-tracking\">SERP tracking sayfamızda\u003C\u002Fa> bulabilirsiniz. Teknik dokümantasyon için \u003Ca href=\"https:\u002F\u002Fdocs.proxyhat.com\u002F\" rel=\"noopener noreferrer\">ProxyHat Docs\u003C\u002Fa> adresini ziyaret edin.\u003C\u002Fp>","Colly'de Döner Proxy Rehberi: Go ile Web Scraping | ProxyHat","Colly'de döner proxy kullanımı: RoundRobinProxySwitcher, residential IP rotasyonu ve üretim desenleri. Go ile engellenmeden scraping yapın.","\u002Ftr\u002Fblog\u002Fcolly-doner-proxy-rehberi",null,"Colly'de Döner Proxy Rehberi | ProxyHat","Go'nun Colly çerçevesinde residential proxy rotasyonu: kod örnekleri, üretim desenleri ve best practice'ler.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fcolly-doner-proxy-rehberi-og.webp",[19,22,25],{"question":20,"answer":21},"Colly'de döner proxy neden önemlidir?","Colly'de döner proxy, hedef sitenin anti-bot sistemleri tarafından IP tabanlı engellenmeyi önlemek için kritiktir. Tek bir IP'den saniyede yüzlerce istek göndermek, Cloudflare veya Datadome gibi WAF'ler tarafından dakikalar içinde tespit edilir. Her istekte IP değiştirmek, trafiğin normal kullanıcı dağılımına benzemesini sağlar ve başarı oranını datacenter proxy'lere göre %90+ artırabilir. Özellikle SERP scraping ve e-ticaret fiyat monitoring gibi yüksek hacimli senaryolarda zorunludur.",{"question":23,"answer":24},"Colly'de döner proxy için hangi proxy tipi en iyisidir?","Colly'de döner proxy için residential proxy'ler en iyi sonucu verir. Datacenter IP'leri ASN bazlı tespit sistemlerinde kolayca flag'lendiği için anti-bot duvarları tarafından hızla engellenir. Residential IP'ler ise Deutsche Telekom, Comcast gibi gerçek ISP'lerden tahsis edildiği için normal kullanıcı trafiğinden ayırt edilmesi çok daha zordur. Mobile proxy'ler de çok yüksek başarı oranı sunar ancak maliyetleri daha yüksektir. ProxyHat'ın residential servisinde kullanıcı adında ülke ve session parametreleri ile her isteği ayrı bir IP'den gönderebilirsiniz.",{"question":26,"answer":27},"Colly ile scraping yaparken engellenmemek için ne yapmalı?","Colly ile engellenmemek için birkaç önlem alın: Her istekte residential proxy ile IP değiştirin, Parallelism'i 10–20 civarında tutun, Delay ve RandomDelay ile istekler arasına 1–3 saniye gecikme ekleyin, gerçekçi User-Agent header'ları kullanın, ve retry mantığını exponential backoff ile kurun. Ayrıca robots.txt kurallarına uyun ve tek siteden saniyede 50'den fazla istek göndermekten kaçının. ProxyHat'ın session parametresi ile sticky session kullanarak aynı domain için tutarlı IP kullanabilirsiniz.",false,"2026-08-04T10:05:34+00:00","2026-10-03T08:57:48+00:00","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fcolly-doner-proxy-rehberi-master.webp","Rotating Proxies in Colly: A Framework-Idiomatic Guide for Go Developers","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fcolly-doner-proxy-rehberi-card.webp",12,{"name":36,"slug":37,"bio":38,"avatar_url":14,"website_url":14,"social_links":14},"ProxyHat Team","proxyhat-team","The ProxyHat editorial team covers proxies, web scraping, and data extraction.",[40],{"id":41,"slug":42,"name":43,"description":14,"meta_title":44,"meta_description":45,"parent_id":14},4,"gelistirici-rehberleri","Geliştirici Rehberleri","Geliştirici Rehberleri | ProxyHat Blog","Proxy entegrasyonu için kod eğitimleri ve SDK rehberleri.",[],{"es":48,"ru":49,"ja":50,"pt":51,"pl":52,"ko":53,"tr":13,"zh":54,"it":55,"de":56,"en":57,"fr":58,"x-default":57},"\u002Fes\u002Fblog\u002Frotacion-proxies-colly-golang-1","\u002Fru\u002Fblog\u002Frotaciya-proksi-v-colly-1","\u002Fja\u002Fblog\u002Fcolly-purokushi-roteshon-gaido","\u002Fpt\u002Fblog\u002Fproxies-rotativos-em-colly","\u002Fpl\u002Fblog\u002Frotacja-proxy-w-colly-1","\u002Fko\u002Fblog\u002Fcolly-rotating-proxy-guide","\u002Fcn\u002Fblog\u002Fcolly-lunhuan-daili-shixian-zhinan","\u002Fit\u002Fblog\u002Fproxy-rotanti-in-colly-guida","\u002Fde\u002Fblog\u002Frotierende-proxies-in-colly","\u002Fblog\u002Frotating-proxies-in-colly-golang","\u002Ffr\u002Fblog\u002Frotation-proxies-colly-golang-1",{"es":48,"ru":49,"ja":50,"pt":51,"pl":52,"ko":53,"tr":13,"zh":54,"it":55,"de":56,"en":57,"fr":58},71,[62,96,123,139],{"id":63,"slug":64,"title":65,"excerpt":66,"featured_image_url":67,"featured_image_alt":68,"card_image_url":69,"og_image_url":70,"published_at":71,"updated_at":72,"content_updated_at":73,"reading_time_minutes":74,"is_featured":28,"indexable":4,"views":75,"author":76,"categories":77,"tags":79},210,"ai-ajanlari-icin-proxy-kurulumu","AI Ajanları için Proxy Kurulumu: browser-use, Crawl4AI ve MCP","Bulut VM'lerindeki ajanlar internete datacenter IP'lerinden çıkar. browser-use, Crawl4AI ve bir MCP sunucusu için güncel, çalışan proxy yapılandırmalarını; sticky ve rotasyon için bir karar tablosunu ve kaçınılması gereken maliyet tuzaklarını derledik.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fai-ajanlari-icin-proxy-kurulumu-master.webp","Proxy Setup for AI Agents: browser-use, Crawl4AI and an MCP Server","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fai-ajanlari-icin-proxy-kurulumu-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fai-ajanlari-icin-proxy-kurulumu-og.webp","2026-10-24T09:00:00+00:00","2026-10-24T09:00:20+00:00","2026-10-03T09:41:40+00:00",14,15,{"name":36,"slug":37,"bio":38,"avatar_url":14,"website_url":14,"social_links":14},[78],{"id":41,"slug":42,"name":43,"description":14,"meta_title":44,"meta_description":45,"parent_id":14},[80,84,88,92],{"id":81,"slug":82,"name":83},1,"web-scraping","Web Scraping",{"id":85,"slug":86,"name":87},2,"residential-proxy","Residential Proxy",{"id":89,"slug":90,"name":91},9,"python","Python",{"id":93,"slug":94,"name":95},22,"playwright","Playwright",{"id":97,"slug":98,"title":99,"excerpt":100,"featured_image_url":101,"featured_image_alt":102,"card_image_url":103,"og_image_url":104,"published_at":105,"updated_at":106,"content_updated_at":73,"reading_time_minutes":74,"is_featured":28,"indexable":4,"views":107,"author":108,"categories":109,"tags":111},206,"camoufox-residential-proxy-python-rehberi","Camoufox ve Residential Proxy: Kod Odaklı Python Rehberi","C++ düzeyinde yamalanmış Firefox olan Camoufox'u residential proxy arkasında çalıştırma: güncel Python API'si, geoip'in neden sabit oturum gerektirdiği, parmak izi tutarlılık listesi ve Patchright ya da nodriver'ın ne zaman daha uygun olduğu.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fcamoufox-residential-proxy-python-rehberi-master.webp","Camoufox with Residential Proxies: A Code-First Python Guide","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fcamoufox-residential-proxy-python-rehberi-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fcamoufox-residential-proxy-python-rehberi-og.webp","2026-10-13T09:00:00+00:00","2026-10-13T09:00:22+00:00",31,{"name":36,"slug":37,"bio":38,"avatar_url":14,"website_url":14,"social_links":14},[110],{"id":41,"slug":42,"name":43,"description":14,"meta_title":44,"meta_description":45,"parent_id":14},[112,113,114,118,119],{"id":81,"slug":82,"name":83},{"id":85,"slug":86,"name":87},{"id":115,"slug":116,"name":117},6,"anti-tespit","Anti-Tespit",{"id":89,"slug":90,"name":91},{"id":120,"slug":121,"name":122},21,"headless-tarayici","Headless Tarayıcı",{"id":124,"slug":125,"title":126,"excerpt":127,"featured_image_url":128,"featured_image_alt":129,"card_image_url":130,"og_image_url":131,"published_at":132,"updated_at":132,"content_updated_at":133,"reading_time_minutes":34,"is_featured":28,"indexable":28,"views":134,"author":135,"categories":136,"tags":138},176,"nodejs-got-scraping-proxy-rehberi","Node.js'de got-scraping ile Proxy Tabanlı Web Scraping Rehberi","Node.js'de got-scraping kütüphanesinin header-generator, HTTP\u002F2 ve proxy desteğini üretim ölçeğinde nasıl kullanacağınızı öğrenin. Residential proxy rotation, retry hooks ve Crawlee entegrasyonu dahil.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fnodejs-got-scraping-proxy-rehberi-master.webp","got-scraping in Node.js: A Developer's Guide with Residential Proxies","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fnodejs-got-scraping-proxy-rehberi-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fnodejs-got-scraping-proxy-rehberi-og.webp","2026-08-04T16:05:06+00:00","2026-10-03T08:57:49+00:00",121,{"name":36,"slug":37,"bio":38,"avatar_url":14,"website_url":14,"social_links":14},[137],{"id":41,"slug":42,"name":43,"description":14,"meta_title":44,"meta_description":45,"parent_id":14},[],{"id":140,"slug":141,"title":142,"excerpt":143,"featured_image_url":144,"featured_image_alt":145,"card_image_url":146,"og_image_url":147,"published_at":148,"updated_at":148,"content_updated_at":149,"reading_time_minutes":34,"is_featured":28,"indexable":28,"views":150,"author":151,"categories":152,"tags":154},195,"bybit-v5-market-api-dondurulen-proxy","Döndürülen Proxy'lerle Bybit V5 Market API Nasıl Scrape Edilir","Bybit V5 Market API'sini döndürülen residential proxy'lerle scrape etmek için tam rehber: orderbook, tickers, kline uç noktaları, rate limit yönetimi, geo-block aşımı ve ProxyHat entegrasyonu ile çalışan kod örnekleri.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fbybit-v5-market-api-dondurulen-proxy-master.webp","How to Scrape the Bybit V5 Market API with Rotating Proxies","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fbybit-v5-market-api-dondurulen-proxy-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Ftr\u002Fbybit-v5-market-api-dondurulen-proxy-og.webp","2026-08-03T16:09:16+00:00","2026-10-04T02:43:17+00:00",87,{"name":36,"slug":37,"bio":38,"avatar_url":14,"website_url":14,"social_links":14},[153],{"id":41,"slug":42,"name":43,"description":14,"meta_title":44,"meta_description":45,"parent_id":14},[],[]]