Çözüldü İstediğim Cookie'yi Alamıyorum

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

76087

Kilopat
Katılım
1 Eylül 2015
Mesajlar
1.336
Makaleler
2
Çözümler
4
Selamlar, 3 gündür web scraping ile almayı denediğim bir cookie var. Ama alamıyorum. Geliştirici konsolunda 2 adet cookie gözüküyor: Biri Request Header bölümünün diğeri ise Respone Header'ın içinde. Nasıl denediysem sadece Response geliyor. Python kullanıyorum, çok basitçe kodum şöyle:
Not: Herhangi bir dil ile de olabilir cevap. Şimdiden teşekkürler :)
Python:
import requests
session = requests.session()
user_agent = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 OPR/62.0.3331.116'}
conn = session.get(url,headers=user_agent)
print(conn.cookies) # set-cookie bölümünü veriyor
print(conn.request.cookie) # user-agent gibi zaten elimde olan gereksiz şeyleri veriyor.

Beklediğim Output:

cookie = {"AKA_A2":"A"}....


ıwantto.png

Üste olanı almak istiyorum.

ıneed.png
 
Çözüm
Teşekkür ederim, birkaç sorum daha olacaktı. Bu cookileri alamazsam, dinamik bir kod oluşturuyor. Bu kodu cookie içinden almak mümkün - meğersem değilmiş - fakat eğer bu cookie'yi alamazsam nasıl siteye giriş yaptırabilirim ki hesabı?. Bunu yapan onlarca kişi var. Acaba methodumda mı hata var?

Bu login olacagin siteye gore degisir, ama browser'dan login oldugun her yere programlamatik olarak de login olursun eger Captcha yoksa.

Cogu web sitesi, cookie kullanmadan da login olmana izin verir. Login icin POST istegi gonderirsin ( kullanici adi + sifre ) , server sana response icinde "set-cookie" degeri gonderir.

Daha sonra bu cookie ile attigin requestlerde senin kim oldugunu tanir.

Verdigin ornekte sen cookie degerini "Request" ten almaya calisiyordun, bunu Response'tan alman gerekiyor.
Request'te bulunan cookie'yi alamazsin cunku onu browser gecmisteki Response'lara bakarak olusturuyor, serverdan donen bir cevap degil cunku Request.

Response'ta bulunan "set-cookie" alanini alip, bir sonraki request'inde kullanarak devam edebilirsin.

response.header.cookies ya da response.cookies gibi bir alan uzerinden response cookie bilgilerine ya da "set-cookie" instruction'inina ulasabilirsin.
 
Request'te bulunan cookie'yi alamazsin cunku onu browser gecmisteki Response'lara bakarak olusturuyor, serverdan donen bir cevap degil cunku Request.

Response'ta bulunan "set-cookie" alanini alip, bir sonraki request'inde kullanarak devam edebilirsin.

response.header.cookies ya da response.cookies gibi bir alan uzerinden response cookie bilgilerine ya da "set-cookie" instruction'inina ulasabilirsin.
Teşekkür ederim, birkaç sorum daha olacaktı. Bu cookileri alamazsam, dinamik bir kod oluşturuyor. Bu kodu cookie içinden almak mümkün - meğersem değilmiş - fakat eğer bu cookie'yi alamazsam nasıl siteye giriş yaptırabilirim ki hesabı?. Bunu yapan onlarca kişi var. Acaba methodumda mı hata var?
 
Teşekkür ederim, birkaç sorum daha olacaktı. Bu cookileri alamazsam, dinamik bir kod oluşturuyor. Bu kodu cookie içinden almak mümkün - meğersem değilmiş - fakat eğer bu cookie'yi alamazsam nasıl siteye giriş yaptırabilirim ki hesabı?. Bunu yapan onlarca kişi var. Acaba methodumda mı hata var?

Bu login olacagin siteye gore degisir, ama browser'dan login oldugun her yere programlamatik olarak de login olursun eger Captcha yoksa.

Cogu web sitesi, cookie kullanmadan da login olmana izin verir. Login icin POST istegi gonderirsin ( kullanici adi + sifre ) , server sana response icinde "set-cookie" degeri gonderir.

Daha sonra bu cookie ile attigin requestlerde senin kim oldugunu tanir.

Verdigin ornekte sen cookie degerini "Request" ten almaya calisiyordun, bunu Response'tan alman gerekiyor.
 
Çözüm
Teşekkür ederim, birkaç sorum daha olacaktı. Bu cookileri alamazsam, dinamik bir kod oluşturuyor. Bu kodu cookie içinden almak mümkün - meğersem değilmiş - fakat eğer bu cookie'yi alamazsam nasıl siteye giriş yaptırabilirim ki hesabı?. Bunu yapan onlarca kişi var. Acaba methodumda mı hata var?
Reverse-engineering mantığı ile. Siteye giriş yaparken Network kısmına girin, "Record" tuşuna basın.
Normal giriş yapın, gelenler/gidenler kaydedilmeye başlayacaktır. HTTP Post/GET isteklerini filtreleyin, gidip gelen görseller, js dosyaları, vb. kalabalık yapmasın.
Geriye taş çatlasa beş tane istek kalacaktır, onların request ve response headerlarını, URL'lerini inceleyerek istediğinize ulaşabilirsiniz. Bu URL'ye aynı şekilde istek atarak giriş yapabilir, cookieleri alabilirsiniz.
 
Reverse-engineering mantığı ile. Siteye giriş yaparken Network kısmına girin, "Record" tuşuna basın.
Normal giriş yapın, gelenler/gidenler kaydedilmeye başlayacaktır. HTTP Post/GET isteklerini filtreleyin, gidip gelen görseller, js dosyaları, vb. kalabalık yapmasın.
Geriye taş çatlasa beş tane istek kalacaktır, onların request ve response headerlarını, URL'lerini inceleyerek istediğinize ulaşabilirsiniz. Bu URL'ye aynı şekilde istek atarak giriş yapabilir, cookieleri alabilirsiniz.
Aynı şekilde yaptım, oradan elediklerimiz bunlar :)


Cogu web sitesi, cookie kullanmadan da login olmana izin verir.
Direkt 403 veriyor ne yazık ki.

Cogu web sitesi, cookie kullanmadan da login olmana izin verir. Login icin POST istegi gonderirsin ( kullanici adi + sifre ) , server sana response icinde "set-cookie" degeri gonderir.
Giriş yaparken tarayıcı gibi gözükmek için "user-agent", "csrf_token", "sessionID" gibi değerleri de kullanmam gerekmez mi?
Daha sonra bu cookie ile attigin requestlerde senin kim oldugunu tanir.
Verdigin ornekte sen cookie degerini "Request" ten almaya calisiyordun, bunu Response'tan alman gerekiyor.
Yani bizim direkt olarak cookie değerini göndermemiz yeterli mi?
Çok teşekkür ederim hocam. 4 gündür sabah-akşam araştır-dene yapıyordum.
 
Aynı şekilde yaptım, oradan elediklerimiz bunlar :)



Direkt 403 veriyor ne yazık ki.


Giriş yaparken tarayıcı gibi gözükmek için "user-agent", "csrf_token", "sessionID" gibi değerleri de kullanmam gerekmez mi?

Yani bizim direkt olarak cookie değerini göndermemiz yeterli mi?
Çok teşekkür ederim hocam. 4 gündür sabah-akşam araştır-dene yapıyordum.

SessionID kullanimi server implementasyonuna gore degisir. Eger request icinde gondermezsen server senin icin yeni bir sessionID olusturur ve seni o sekilde tanir. SessionID olmadigi icin 403 almazsin, cunku siteye hayatinda ilk defa gelen kullanici henuz sessionId degerine sahip degildir ve ilk ziyaretinde 403 almasi mantikli olmaz.

user-agent => bu da Cogu site icin zorunlu degil ama kullanmak mantikli. Kimi web siteleri user-agent olmazsa seni bot zannettigi icin bloklar ama yazilan botlara user-agent eklemen cok kolay oldugu icin bu kontrol de anlamsizlasiyor.

CSRF => Buyuk ihtimalle problem bu. Eger login formunda CSRF kullanilan bir yerse bunu da login icinde ya da header icinde vermen gerekiyor. Genelde CSRF token'i cookie olarak degil POST icinde payload olarak verilir. 403 almanin sebebi bu olabilir.

Bahsi gecen siteye login olup gonderdigin POST request'ini bir incele, bak bakalim kullanici adin ve sifrenle beraber ne gonderiyor. Eger CSRF de gonderiliyorsa POST icinde o halde senin de koduna bunu eklemen gerek.

CSRF i cookie'ye yazman cok mantikli olmaz, zira farkli formlar icin farkli CSRF Token'i uretirsin. Cookie degeri senin tum ziyaretin boyunca degismesi beklenmeyen seylerden olusur.

Istersen site adini yolla ben de bakayim.
 
SessionID kullanimi server implementasyonuna gore degisir. Eger request icinde gondermezsen server senin icin yeni bir sessionID olusturur ve seni o sekilde tanir. SessionID olmadigi icin 403 almazsin, cunku siteye hayatinda ilk defa gelen kullanici henuz sessionId degerine sahip degildir ve ilk ziyaretinde 403 almasi mantikli olmaz.

user-agent => bu da Cogu site icin zorunlu degil ama kullanmak mantikli. Kimi web siteleri user-agent olmazsa seni bot zannettigi icin bloklar ama yazilan botlara user-agent eklemen cok kolay oldugu icin bu kontrol de anlamsizlasiyor.

CSRF => Buyuk ihtimalle problem bu. Eger login formunda CSRF kullanilan bir yerse bunu da login icinde ya da header icinde vermen gerekiyor. Genelde CSRF token'i cookie olarak degil POST icinde payload olarak verilir. 403 almanin sebebi bu olabilir.

Bahsi gecen siteye login olup gonderdigin POST request'ini bir incele, bak bakalim kullanici adin ve sifrenle beraber ne gonderiyor. Eger CSRF de gonderiliyorsa POST icinde o halde senin de koduna bunu eklemen gerek.

CSRF i cookie'ye yazman cok mantikli olmaz, zira farkli formlar icin farkli CSRF Token'i uretirsin. Cookie degeri senin tum ziyaretin boyunca degismesi beklenmeyen seylerden olusur.

Istersen site adini yolla ben de bakayim.
Hallettim işi, çok sağolun. CSRF ile denedim ilk olarak çalıştı. Tıkandığım nokta cookielerdi o da çözüldü. Çok teşekkür ederim yardımlarınız için :)
Hocam dün süper çalışan program bugün patladı. Aklıma gelen 1-2 sebep var:
1 - Çok fazla request atıp, aldığım için ip-ban yedim.
2- Site koruma methodunu değiştirdi.
1. yöntemin olmadığını arkadaşımda denediğimizde anladık, siteye GET bile atamıyoruz.
Sitenin linki: https://secure3.hilton.com/en/hh/customer/login/index.htm
Dediğiniz gibi captcha olanlar geçmesi imkansız gelse de bir paralı api sayesinde 15-20 saniyede bir geçebiliyorum. Bugun get bile atamıyorum adrese nedense.
@bitwise
 
Son düzenleme:
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Geri
Yukarı