<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Mehmetcan Şahin - camoufox</title>
      <link>https://mehmetcansahin.com</link>
      <description>Mehmetcan Şahin&#x27;den web, mobil, DevOps ve pratik yazılım geliştirme üzerine teknik notlar.</description>
      <generator>Zola</generator>
      <language>tr</language>
      <atom:link href="https://mehmetcansahin.com/tr/tags/camoufox/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Thu, 08 Oct 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Camouflare: FlareSolverr’dan Camoufox’a geçiş</title>
          <pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate>
          <author>Mehmetcan Şahin</author>
          <link>https://mehmetcansahin.com/tr/blog/camouflare-flaresolverrdan-camoufoxa-gecis/</link>
          <guid>https://mehmetcansahin.com/tr/blog/camouflare-flaresolverrdan-camoufoxa-gecis/</guid>
          <description xml:base="https://mehmetcansahin.com/tr/blog/camouflare-flaresolverrdan-camoufoxa-gecis/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;camouflare-cover.png&quot; alt=&quot;Camouflare: FlareSolverr’dan Camoufox’a geçiş&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;İnternetten veri toplamak için çıktığım yolda, popüler seçeneklerden biri olan FlareSolverr ile ilerlemeye çalıştım. Ancak hız ve kararlılık tarafında yaşadığım problemleri çözebilmek için Camouflare’i geliştirdim.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;neden-camoufox&quot;&gt;Neden Camoufox?&lt;&#x2F;h2&gt;
&lt;p&gt;Öncelikle FlareSolverr’ın nasıl çalıştığına bakalım. FlareSolverr, Selenium ve &lt;code&gt;undetected-chromedriver&lt;&#x2F;code&gt; kullanarak Chrome&#x2F;Chromium çalıştırıyor. Kalıcı bir oturum kullanmıyorsanız her istek için yeni bir tarayıcı başlatılıyor. Birden fazla isteği aynı anda gönderdiğinizde bellek tüketimi de artıyor. Ayrıca her seferinde tarayıcının açılmasını beklemek gerekiyor. Projenin kendi dokümantasyonunda da RAM’i sınırlı makinelerde çok sayıda eşzamanlı istek gönderilmemesi öneriliyor. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FlareSolverr&#x2F;FlareSolverr#how-it-works&quot;&gt;FlareSolverr dokümantasyonu&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Kaynak tüketiminin dışında, doğrulama adımlarında takılıp zaman aşımına uğrayan istekler de olabiliyor. Projenin issue kayıtlarında bu konuda kullanıcı raporları bulunuyor. Bunlar belirli sürüm ve kullanım durumlarına ait olsa da alternatif arayanların karşılaştığı problemleri gösteriyor. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FlareSolverr&#x2F;FlareSolverr&#x2F;issues&#x2F;1741&quot;&gt;Örnek bir issue&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Camoufox ise Firefox tabanlı, web scraping için geliştirilmiş bir tarayıcı. Gereksiz bileşenlerin azaltılmasıyla bellek kullanımı ve başlatma süresi üzerine optimizasyonlar yapılıyor. Bunun yanında tarayıcı parmak izi ve otomasyonun algılanması konusunda tarayıcı seviyesinde değişiklikler sunuyor. Bu özellikler benim aradığım çözüme daha uygundu. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;daijro&#x2F;camoufox#introduction&quot;&gt;Camoufox&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Bu amaçla geliştirilmiş Byparr reposu da vardı. Ancak benim kullanımımda o da sağlıklı çalışmadı. Bunun üzerine FlareSolverr API’sini koruyan, arka tarafta Camoufox kullanan kendi çözümümü geliştirmeye başladım.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;camouflare-nasil-calisiyor&quot;&gt;Camouflare nasıl çalışıyor?&lt;&#x2F;h2&gt;
&lt;p&gt;Camouflare, FlareSolverr ile benzer şekilde &lt;code&gt;&#x2F;v1&lt;&#x2F;code&gt; üzerinden istek alıyor. GET, POST ve oturum oluşturma, listeleme ve silme komutlarını destekliyor. Sayfanın HTML içeriğini ve çerezlerini alıp kendi uygulamanızda kullanabilirsiniz. HTML içerisinden istediğiniz verileri çıkarma işlemini ise sizin yapmanız gerekiyor.&lt;&#x2F;p&gt;
&lt;p&gt;Tarayıcı tarafında hazır tutulan küçük bir havuz bulunuyor. Her istekte yeni bir tarayıcı başlatmak yerine bu havuzdaki tarayıcılar kullanılıyor. Varsayılan yapılandırmada havuz en fazla iki tarayıcıya çıkabiliyor ve her birinde aynı anda bir tarayıcı bağlamı çalışıyor.&lt;&#x2F;p&gt;
&lt;p&gt;Oturumsuz istekler birbirinden ayrı bağlamlarda işleniyor. Eğer aynı oturumu sonraki isteklerde de kullanmak istiyorsanız kalıcı bir session oluşturabilirsiniz. Bu durumda oturumun çerezleri ve tarayıcı durumu korunuyor.&lt;&#x2F;p&gt;
&lt;p&gt;Havuz dolduğunda yeni istekler belirlenen süre boyunca boş yer bekliyor. Tarayıcılar da kullanım veya yaş sınırına ulaştığında yenileniyor. Burada tarayıcı sayısını ve bekleme sürelerini kullanım durumunuza göre ayarlayabilirsiniz. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mehmetcansahin&#x2F;camouflare&#x2F;blob&#x2F;main&#x2F;docs&#x2F;deployment.md&quot;&gt;Yapılandırma detayları&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Camouflare’in tanıtım videosunu aşağıdan izleyebilirsiniz:&lt;&#x2F;p&gt;
&lt;div style=&quot;aspect-ratio: 16 &#x2F; 9; width: 100%;&quot;&gt;
  &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;oEZkk81Et4w&quot;
    title=&quot;Camouflare tanıtım videosu&quot;
    style=&quot;width: 100%; height: 100%; border: 0;&quot;
    loading=&quot;lazy&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    referrerpolicy=&quot;strict-origin-when-cross-origin&quot;
    allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;kurulum-ve-kullanim&quot;&gt;Kurulum ve kullanım&lt;&#x2F;h2&gt;
&lt;p&gt;Camouflare’i Docker imajını kullanarak çalıştırabilirsiniz. Öncelikle bir API token oluşturup servisi başlatın:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;export&lt;&#x2F;span&gt;&lt;span&gt; CAMOUFLARE_API_TOKEN&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;openssl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; rand&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;hex&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 32&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-detach&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; camouflare&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-publish&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 127.0.0.1:8191:8191&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-env&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; CAMOUFLARE_API_TOKEN&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-shm-size&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 2g&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-stop-timeout&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 45&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;  mehmetcansahin&#x2F;camouflare:2.0.2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Burada oluşturduğunuz token’ı isteklerde göndermeniz gerekiyor. Servisin hazır olup olmadığını &lt;code&gt;&#x2F;ready&lt;&#x2F;code&gt; üzerinden kontrol edebilirsiniz:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-fail&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; http:&#x2F;&#x2F;127.0.0.1:8191&#x2F;ready&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-header&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Authorization: Bearer &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span&gt;CAMOUFLARE_API_TOKEN&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Servis hazır olduktan sonra örnek bir GET isteği gönderelim:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-request&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; POST&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; http:&#x2F;&#x2F;127.0.0.1:8191&#x2F;v1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-header&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Content-Type: application&#x2F;json&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-header&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Authorization: Bearer &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span&gt;CAMOUFLARE_API_TOKEN&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-data&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    &amp;quot;cmd&amp;quot;: &amp;quot;request.get&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    &amp;quot;url&amp;quot;: &amp;quot;https:&#x2F;&#x2F;example.com&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    &amp;quot;maxTimeout&amp;quot;: 60000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu örnekte &lt;code&gt;request.get&lt;&#x2F;code&gt; ile belirtilen sayfaya gidiyoruz. &lt;code&gt;maxTimeout&lt;&#x2F;code&gt; ile isteğin toplam süre bütçesini 60 saniye olarak belirliyoruz. Başarılı bir yanıtta HTML içeriğini &lt;code&gt;solution.response&lt;&#x2F;code&gt; alanından alabilirsiniz.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;captcha-destegi&quot;&gt;CAPTCHA desteği&lt;&#x2F;h2&gt;
&lt;p&gt;Camouflare’de &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pypi.org&#x2F;project&#x2F;playwright-captcha&#x2F;&quot;&gt;playwright-captcha&lt;&#x2F;a&gt; kütüphanesinin ClickSolver bileşenini kullanan entegre bir çözüm de bulunuyor. Bu çözüm, tarayıcı üzerinden açılan Cloudflare ara doğrulama sayfalarındaki tıklama adımlarını tamamlamayı deniyor. Başarı, karşılaşılan doğrulamaya ve hedef siteye göre değişiyor.&lt;&#x2F;p&gt;
&lt;p&gt;Varsayılan olarak bu özellik kapalı. Açmak için yukarıdaki &lt;code&gt;docker run&lt;&#x2F;code&gt; komutuna aşağıdaki parametreyi ekleyebilirsiniz:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;--env&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; CHALLENGE_SOLVER=click&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;flaresolverr-dan-gecis&quot;&gt;FlareSolverr’dan geçiş&lt;&#x2F;h2&gt;
&lt;p&gt;Mevcut uygulamanız FlareSolverr API’sini kullanıyorsa Camouflare’in desteklediği komutlarla devam edebilirsiniz. Ancak kullandığınız istemcinin API token’ını gönderebilmesi gerekiyor.&lt;&#x2F;p&gt;
&lt;p&gt;Uyumluluk konusunda bazı farklılıklar da var. Örneğin &lt;code&gt;download&lt;&#x2F;code&gt;, &lt;code&gt;returnRawHtml&lt;&#x2F;code&gt; ve &lt;code&gt;tabs_till_verify&lt;&#x2F;code&gt; alanları kabul ediliyor ancak işleme alınmıyor. Bu alanları kullanıyorsanız geçiş yapmadan önce &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mehmetcansahin&#x2F;camouflare#flaresolverr-compatibility&quot;&gt;uyumluluk bölümünü&lt;&#x2F;a&gt; incelemenizi öneririm.&lt;&#x2F;p&gt;
&lt;p&gt;Camouflare’i tek bir güvenilir kullanıcı ve tek uygulama worker’ı ile çalışacak şekilde tasarladım. Bu bir tasarım tercihi. Oturumlar ve tarayıcı havuzu süreç içinde tutuluyor, farklı worker’lar arasında paylaşılmıyor. Birden fazla kullanıcı veya instance ile çalışmak istiyorsanız ayrı container’lar kullanıp isteklerin yönlendirilmesini sizin yönetmeniz gerekiyor. Aynı oturuma ait isteklerin aynı instance’a gitmesini de sağlamalısınız.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;servisin-durumunu-takip-etmek&quot;&gt;Servisin durumunu takip etmek&lt;&#x2F;h2&gt;
&lt;p&gt;Servisin çalışıyor olması ile tarayıcıların istek işlemeye hazır olması farklı durumlar. Bu yüzden &lt;code&gt;&#x2F;health&lt;&#x2F;code&gt; uygulamanın çalıştığını, &lt;code&gt;&#x2F;ready&lt;&#x2F;code&gt; ise tarayıcı altyapısının hazır olduğunu kontrol ediyor.&lt;&#x2F;p&gt;
&lt;p&gt;Havuz ve oturum durumunu görmek için &lt;code&gt;&#x2F;diagnostics&lt;&#x2F;code&gt; kullanabilirsiniz. Ekstra olarak Prometheus metrikleri de bulunuyor. Hata yanıtlarında ise kapasite yetersizliği, zaman aşımı ve tarayıcı bağlantısının kapanması gibi durumları ayırt edebilirsiniz.&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
