folder Tahribat.com Forumları
linefolder Python
linefolder Web Sitesi Python Uygulaması İle Yapılan Sorguyu Kesin Bloklayabilir Mi?



Web Sitesi Python Uygulaması İle Yapılan Sorguyu Kesin Bloklayabilir Mi?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Liquid
    Liquid's avatar
    Kayıt Tarihi: 22/Eylül/2005
    Erkek

    Merhaba, kullandığımız bir web sitesi için işlerimi kolaylaştırmak adına yapay zekaya python ile uygulama yaptırmaya çalışıyorum. Siteye login olacak, liste çağıracak, gelen listede şifrelenmiş id'ler var. Oradan id alıp hazır url sonuna ekleyip sonuçların olduğu sayfayı açacak. Login işini yaptı ancak liste çağırmaya gelince site python çağrısı engelleniyor deyip post yöntemi yerine browser açıp tıklama yaptıralım dedi. 

    ----

    Hata bu: 

    [DEBUG] DataTables status: 200 [DEBUG] DataTables content-type: text/html; charset=utf-8 [DEBUG] Body ilk 300 karakter: <html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: 1111<br><br><a href='javascript:history.back();'>[Go Back]</a></body></html>

    Yapay zeka ise : 

    Bu çıktı çok net: WAF/Firewall (uygulama güvenlik duvarı) Python requests çağrısını engelliyor.

    Request Rejected + support ID bunu gösterir. Yani problem “JSON parse” değil; sunucu DataTables endpoint’ine tarayıcı gibi görünmeyen istemcileri sokmuyor.

     

    Bu durumda “requests ile direkt POST atayım” yaklaşımı bu endpoint için çalışmayacak (login çalışsa bile).

    ---

    Normalde login olduktan sonra listenin olduğu sayfaya geçip orada liste için gerekli kriterleri girip arama yapıyoruz. Bu arama işini login olduktan sonraki sayfada chrome konsola yazınca sorunsuz yapıyor. Konsol'dan sorgu yapmam için bir kod hazırladı. Onu konsola girince cevap alıyorum. Liste geliyor. Benim takıldığım kısım login olurken engellemiyor ama python sorgu yapınca neden engelliyor? Acaba hatalı sorgu yaptık diye mi engelledi? Yoksa gerçekten python olduğunu anladığı için mi engelledi?

    Bunu aşmanın yolu var mı? Browser açıp onun üstünden yaptırmak istemiyorum açıkçası. Şimdiden tşkler


    İmzalamazsam ne olcak?
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek

    Normalde site kolay kolay sorgunun pythondan geldiğini anlayamaz ama cloudflare waf varsa anlayabilir, eğer chrome açarak requestini gönderebiliyorsan o şekilde devam et derim. Ya da performansa gerçekten ihtiyacın varsa o chromeun network tabından requesti olduğu gibi alıp raw göndermeyi dene pyton ile öyle de aşabilirsin. ama waf birden fazla çağrıyı analiz ediyor olabilir onu bilemedim.


    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    end
    end's avatar
    Kayıt Tarihi: 16/Ekim/2016
    Erkek
    HolyOne bunu yazdı

    Normalde site kolay kolay sorgunun pythondan geldiğini anlayamaz ama cloudflare waf varsa anlayabilir, eğer chrome açarak requestini gönderebiliyorsan o şekilde devam et derim. Ya da performansa gerçekten ihtiyacın varsa o chromeun network tabından requesti olduğu gibi alıp raw göndermeyi dene pyton ile öyle de aşabilirsin. ama waf birden fazla çağrıyı analiz ediyor olabilir onu bilemedim.

    Tls fingerprintten falan da anlıyorlar artık şeyhim. Baya low level tcp paketini profilliyor lavuklar. Eğer requestlerde hata yapmiyorsa ve yine de site anlayıp naş çekiyorsa pip'teki curl-cffi paketini denesin bir arkadaş


    0x0480 takilin madem ﷽﷽﷽
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Liquid
    Liquid's avatar
    Kayıt Tarihi: 22/Eylül/2005
    Erkek
    HolyOne bunu yazdı

    Normalde site kolay kolay sorgunun pythondan geldiğini anlayamaz ama cloudflare waf varsa anlayabilir, eğer chrome açarak requestini gönderebiliyorsan o şekilde devam et derim. Ya da performansa gerçekten ihtiyacın varsa o chromeun network tabından requesti olduğu gibi alıp raw göndermeyi dene pyton ile öyle de aşabilirsin. ama waf birden fazla çağrıyı analiz ediyor olabilir onu bilemedim.

    Raw gönderme işi nasıl oluyor? Yapay zekka post u bash olarak kopyala gönder konsolda kontrol etmek için kod vericem demişti. O mu?

    Bir de red sebebi kesin yapay zekanın dediği gibi midir? Requestte hata olsa bundan dolayı bloklar mı yoksa red yerine requestte hata mı var der?

     

    Liquid tarafından 09/Oca/26 13:30 tarihinde düzenlenmiştir

    İmzalamazsam ne olcak?
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nonelabs
    nonelabs's avatar
    Kayıt Tarihi: 20/Haziran/2022
    Erkek

    python ile yapma. playwright ile normal user profili imiş gibi imitate ederek sayfaya gir, javascript ile ne istiyorsan alıp pythona aktarabilirsin.

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Liquid
    Liquid's avatar
    Kayıt Tarihi: 22/Eylül/2005
    Erkek
    nonelabs bunu yazdı

    python ile yapma. playwright ile normal user profili imiş gibi imitate ederek sayfaya gir, javascript ile ne istiyorsan alıp pythona aktarabilirsin.

    playwright ile bişey yaptırıyor hocam şuan. Kodlama bilmediğim için ne derse deniyorum. Tabi sürekli her şeyi de denemek istemiyorum. Sistem yöneticisi de hataları fark ederse hayırdır diyecek :)

    ben istiyordum ki uygulamayı açayım, bağlanıp sonuçları alıp excel'e aktarsın. öyle browser falan açıp, yüklemesini beklemesin ama o şekilde olmayacak gibi. 


    İmzalamazsam ne olcak?
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cosmic
    Cosmic's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    user agent gönderdin mi ? chrome vs gibi


    Bittik biz bittik
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Liquid
    Liquid's avatar
    Kayıt Tarihi: 22/Eylül/2005
    Erkek
    Cosmic bunu yazdı

    user agent gönderdin mi ? chrome vs gibi

    yazdığı kodu atıcam hocam ama yazışma uzadıkça acayip kasıyor. ulaşınca atıcam. sanırım onu atlamamıştır.


    İmzalamazsam ne olcak?
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Liquid
    Liquid's avatar
    Kayıt Tarihi: 22/Eylül/2005
    Erkek

     aşağıda bir kısmı var. 

    ----------

    import re
    import sys
    from typing import Dict, Any, List, Optional, Tuple
    
    
    import requests
    
    
    
    GKLS_BASE = "xx"
    GKLS_TUM_NUMUNELER = f"{xx)"
    
    
    # TODO: Burayı Network'ten bulduğun "Request URL" ile güncelle
    DATATABLES_URL = f"{xxr"
    
    
    
    YETKI_LOGIN_MARKER = "xxx"
    
    
    
    def verify_logged_in(session: requests.Session) -> None:
    r = session.get(xxxx, allow_redirects=False, timeout=30)
    if r.status_code in (301, 302, 303, 307, 308):
    loc = r.headers.get("Location", "")
    if xxxx in loc:
    raise RuntimeError("Oturum yok / login gerekli.")
    if r.status_code != 200:
    raise RuntimeError(f"Beklenmeyen durum kodu: {r.status_code}")
    
    
    
    def prompt_credentials() -> Tuple[str, str]:
    import getpass
    username = input("Kullanıcı Adı: ").strip()
    password = getpass.getpass("Şifre: ").strip()
    return username, password
    
    
    
    def extract_form_inputs(html: str) -> Dict[str, str]:
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html, "lxml")
    form = soup.find("form")
    if not form:
    return {}
    data: Dict[str, str] = {}
    for inp in form.select("input[name]"):
    name = inp.get("name")
    if not name:
    continue
    itype = (inp.get("type") or "").lower()
    if itype in ("checkbox", "radio"):
    continue
    data[name] = inp.get("value", "")
    return data
    
    
    
    def do_login(session: requests.Session, username: str, password: str) -> None:
    # xxx'e git
    r = session.get(xxx, allow_redirects=True, timeout=30)
    if xxxx not in r.url:
    verify_logged_in(session)
    return
    
    
    payload = extract_form_inputs(r.text)
    payload["txtKullaniciAdi"] = username
    payload["txtSifre"] = password
    payload["__EVENTTARGET"] = "btnGiris"
    payload["__EVENTARGUMENT"] = ""
    payload.setdefault("btnGiris", "Giriş")
    
    
    session.headers.update({
    "Origin": "xxxx",
    "Referer": r.url,
    })
    
    
    session.post(r.url, data=payload, allow_redirects=True, timeout=30)
    verify_logged_in(session)
    
    
    
    def build_datatables_payload(search_value: str, start: int, length: int, draw: int = 1) -> Dict[str, Any]:
    """
    DataTables server-side payload.
    Senin paylaştığın payload ile uyumlu olacak şekilde minimum alanları gönderiyoruz.
    (columns[] listesi şart olabiliyor.)
    """
    cols = [xxx]
    
    
    payload: Dict[str, Any] = {
    "draw": draw,
    "start": start,
    "length": length,
    "search[value]": search_value,
    "search[regex]": "false",
    "order[0][column]": "1", # xx
    "order[0][dir]": "desc",
    "xxxx": "false",
    # diğer filtreleri boş geçiyoruz:
    
    }
    
    
    for i, c in enumerate(cols):
    payload[f"columns[{i}][data]"] = c
    payload[f"columns[{i}][name]"] = ""
    payload[f"columns[{i}][searchable]"] = "true"
    payload[f"columns[{i}][orderable]"] = "true" if c != "xxx" else "false"
    payload[f"columns[{i}][search][value]"] = ""
    payload[f"columns[{i}][search][regex]"] = "false"
    
    
    return payload
    
    
    
    def extract_xxx(islemler_html: str) -> Optional[str]:
    """
    IsLeMLeR HTML string'inden xxx parametresini çeker.
    Örnek:
    xxxx"""

    --------------

    devamı da var ama bundan sonra aşağıdakini güncelledi.  login işlemi olmuştu sorgu olmamıştı.

    ---------------------------------------

    def fetch_numune_page(session: requests.Session, search_value: str, start: int = 0, length: int = 100):
    verify_logged_in(session)

    payload = build_datatables_payload(search_value=search_value, start=start, length=length, draw=1)

    headers = {
    "X-Requested-With": "XMLHttpRequest",
    "Referer": xxxxxx,
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    }

    # Redirect olursa yakalayalım (login sayfasına atıyor mu?)
    r = session.post(DATATABLES_URL, data=payload, headers=headers, timeout=30, allow_redirects=False)

    print("\n[DEBUG] DataTables status:", r.status_code)
    print("[DEBUG] DataTables content-type:", r.headers.get("Content-Type", ""))

    # Redirect kontrolü
    if r.status_code in (301, 302, 303, 307, 308):
    loc = r.headers.get("Location", "")
    print("[DEBUG] Redirect Location:", loc)
    raise RuntimeError("DataTables isteği redirect oldu (muhtemelen login düştü).")

    r.raise_for_status()

    text = (r.text or "")
    print("[DEBUG] Body ilk 300 karakter:\n", text[:300].replace("\n", "\\n"))

    # JSON parse
    return r.json().get("data", [])

    --------

    bundan sonra da firewall bloklamış dedi.


    İmzalamazsam ne olcak?
Toplam Hit: 696 Toplam Mesaj: 9
python firewall sorgu engelleme sorgu waf