Python3 - Requests Modülü - SSL Kullanma?

Arkadaşlar selam.
Bir bot uygulaması yazıyorum siteden cevap alması lazım. Ancak bi sayfada ssl kullanmak gerekiyor sitenin ssl’ini firefox ile .pem uzantılı şekilde indirdim. Bu ssl’i kullanarak işlem nasıl yapabilirim?

istekBaba = istekMain.get(urlLogin, headers=baslik, verify=r"C:\Users\emRe\Documents\works\python\test\test.pem")

Cevaptaki http durum kodu 403 alıyorum, almamam lazım başka uygulamalarla(burpsuite mesela) denedim ssl kullanırsam hata vermiyor. Yazdığım programdaki kodun neresinde hata var?

Arkadaşlar sorun galiba ssl sertifikasında requests modülüne nasıl bir sertifika vermeliyim?

Merhaba, aşağıdaki bağlantının yardımı dokunur mu acaba?

1 Beğeni

Merhaba hocam 2 türlüde 403 alıyorum. (verify=True yada verify=False)
O bağlantıları zaten okudum birkaç defa bu hatayla günlerdir uğraşıyorum.
Sertifika olarak ne kullanmalıyım? curl sertifikasını mı yoksa sitenin kendi sertifikası mı?

Sitenin kendi sertifikasını bir deneyin isterseniz.

1 Beğeni

Yine olmadı. Sitenin kendine ait sertifikasını firefox ile buldum. Hem zincirli hem zincirsiz denedim .pem uzantılı olan sertifikayı olmadı üzerine gidip windows makinesindeki sertifikayı bulup indirdim(base64 ile encode edilmemiş ve özel anahtarsız) denedim olmadı. istekMain session bağlıydı session’a gelip denedim verify ile yine olmadı.

Edit: ama ilginç yanı ise burpsuite gibi proxy kullanınca istek doğru çalışıyor.

urllib ile bir deneyin isterseniz.

import ssl

from urllib import request

request.urlopen(
    url="url",
    context=ssl.SSLContext(ssl.PROTOCOL_SSLv23)
)
1 Beğeni

olmadı. hocam projeyi urllib uyumlu hale getirdimde şöyle bi hata veriyor hiç anlamadım.

C:\Users\emRe\Documents\works\python\test>python test.py
Traceback (most recent call last):
  File "test.py", line 20, in <module>
    res = request.Request(url=urlLogin,context=ssl.SSLContext(ssl.PROTOCOL_SSLv23))
TypeError: __init__() got an unexpected keyword argument 'context'

request.Request yapmamın sebebi eklemem gereken cookie ve header var.

Eğer urlopen yerine eklersem context=ssl.SSLContext(ssl.PROTOCOL_SSLv23) olan yeri şöyle bi hata alıyorum.

TypeError: expected string or bytes-like object

requests'in parametreleri daha farklı olsa gerek. :confused:

1 Beğeni

hocam açıkça yapmak istediğim şey basit
bi login sayfası var oraya bağlanmak istiyorum.
ancak bu login sayfasına önceki sayfadan gelen cookieler ile bağlanabiliyorum.
ve login sayfasına düz bağlanamıyorum ssl gerek. burp suite kullanırken anladım bunu.
velhasıl kelam bi siteye ssl ile nasıl bağlanabilirim? olay burda bitiyor.

Anladım. Maalesef bu konuda size yardımcı olamayacağım gibi hissediyorum. Benim çok da vakit geçirdiğim bir alan değil ne yazık ki. Ama umuyorum diğer arkadaşlar bu konuda size yardımcı olurlar. Saat biraz geç, belki yarın işinize yarar bir cevap alabilirsiniz.

1 Beğeni

kral düşünmen yeterli :slight_smile: teşekkür ederim çaba gösterdiğin için.

1 Beğeni

Rica ederim, bir çözüm bulabilseydik iyi olurdu. Neyse bakalım belki yarın işe yarar bir öneri gelir umarım.

1 Beğeni

tüm kodu atayım belki sabahleyin biri yardım edebilir.

import requests
import ssl
from urllib import request

urlMain = "https://www.example.com/"
urlLogin = "https://www.example.com/join/"

istekBaba = requests.get(urlMain)
cookies = istekBaba.cookies.get_dict()
baslik = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0",
    "Sec-Fetch-Site" :"none",
    "Accept" : "text/html",
    "Accept-Language" : "en-US,en;q=0.5",
    "Accept-Encoding" : "gzip, deflate",
    "Referer" : "https://www.example.com/"
}

req = request.Request(url=urlLogin,headers=baslik)
req.add_header("Cookie","ud_rule_vars"+"="+cookies["ud_rule_vars"]+";")
contextssl = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
res = request.urlopen(req,context=contextssl)
with res as f:
    print(f.read())

hata şu dönen response utf-8 ile decode edilmiyor. html sayfası dönmüyor galiba ilginç.

Cevap gelmis. Sorun nedir?

Burp Suite is a leading range of cybersecurity tools

imis. Bu cybersecurity tool’larindan hangisini, ne sekilde ve ne amacli kullandigini belirtmedigin surece bu soyledigin bize hic bir bilgi vermiyor. Basit bir HTTP GET request’i yaptigindan supheleniyorum, onun icin curl gibi yaygin ve ozgur tool’lari kullanirsan sana yardim edilme ihtimali artacaktir.

Ustelik yaptigin istegi ve aldigin cevabi kopyalayip buraya yapistirma sansin dogar. (Bunu da rica ediyorum)

​443. port’undaki SSL sertifikasini veya public key’ini mi indirdin?
Hangi sitenin?
Neden?

Ne icin sertifika vermek istiyorsun?

Hatta genel olarak, ne yapmaya calisiyorsun?

Tum kod bende example.com’da cookie verilmedigi icin hata verdi:

Traceback (most recent call last):
  File "a.py", line 20, in <module>
    req.add_header("Cookie","ud_rule_vars"+"="+cookies["ud_rule_vars"]+";")
KeyError: 'ud_rule_vars'

hata veriyor cloudflare olduğundan normalde 200 almam lazım normalde.

burp suite: local ağımdaki http trafiğini dinliyorum o zaman çalışıyor. (fiddler,charles proxy gibi)
Amacı local ağdaki http trafiğini izlemek. Misal bi siteye http isteği yolladım o isteği yakalamak ve dönen response’u yakalamak üzerinde istenirse değişiklikler yapabilmek.

curl ile gerekli header başlıklarını ve cookieleri ekleyince çalıştı. ancak program tek curl ile çalışamaz python ile yapmak istiyorum çünkü daha kompleks bi yapıda program.

Yaptığım istek şu:

curl -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74." -H "Sec-Fetch-Site: none" -H "Accept-Language: en-US,en;q=0.5" https://www.example.com/join/login-popup/ --cookie "ud_rule_vars=eJyFjcEOgyAQBX_FcG1tWNyi8i0kZEGwpKakiF6M_16TtklvvU7evNlYoTz64gezxjmWlBUF6K4A0sFgsR0sSYlNZ7sDdoiyVy6le_RMVWzTLMQ8l7drBipeH1wzwQWvuawBKxCqaRXCBfsWRX_iXHGu2flYTXSoJS3uZkqmEKIzc1qy82alHMlOn7eUR3pE9yNl_1z8_K8oJQC23-LO9hdwsUeB:1jkRtN:xABXvHXt_fRwvxKmKnvrCkgF3ao;"

Cevapta sitenin içeriği var. Benim ulaşmak istediğimde buydu. Ancak curl ile erişebiliyorken neden requests modülüyle erişemiyorum? SSL hatası var sanırsam.

ssl sertifikasını indirdim. sitenin ismini vermem uygun olmaz. neden yaptım çünkü bot kodluyorum. auto-login bot’u.

Siteye direkt olarak erişmeye çalıştığımda hata veriyor bende birkaç ufak deneme yanılma yoluyla bu hatanın ssl sertifikasında olduğunu buldum(%80 ihtimalle) ve ssl sertifikası eklemeye çalışıyorum hatanın gitmesi için.

açıkça yapmak istediğim şey basit
bir login sayfası var oraya bağlanmak istiyorum.
ancak bu login sayfasına önceki sayfadan gelen cookieler ile bağlanabiliyorum.
ve login sayfasına düz bağlanamıyorum ssl gerek. burp suite kullanırken anladım bunu.
velhasıl kelam bi siteye ssl ile nasıl bağlanabilirim? olay burda bitiyor.

ve son olarak ilginiz için teşekkür ederim.

example.com örnek domain oraya asıl domaini yazınca cookie’yi çekiyor.
ama firma ismini söyleyemem :frowning:

Konunun TLS ile ilgili olduguna dair en ufak bir ipucu goremiyorum, neden donup dolasip oraya geliyoruz?


Sanmayla olacak is degil. Kodu calistirip bakabilirsin.

Yaptiklari istekler farklidir.
Paket analiz tool’lariyla birebir karsilastirmani tavsiye ediyorum.

1 Beğeni

Selam hocam. Python ile paketlerin isteklerini dinledim. Şu kod ile

from http.client import HTTPConnection  # py3
HTTPConnection.debuglevel = 1

Ve sonuç gördüğünüz gibi 403 error veriyor verify ellemediğim veyahut false olduğu zaman. onun yerine burpsuite açıkken verify=False yaptığımda ise 200 veriyor. Yani çalışıyor. 2 İstekte aynı tek fark ssl kullanmada.

403 Error : send: b'GET /join/login-popup/?locale=en_US&display_type=popup HTTP/1.1\r\nHost: www.example.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0\r\nAccept-Encoding: gzip, deflate\r\nAccept: text/html\r\nConnection: keep-alive\r\nSec-Fetch-Site: none\r\nAccept-Language: en-US,en;q=0.5\r\nReferer: https://www.example.com/\r\nCookie: ud_rule_vars="Jx9zUsOgyAUheGtGKathvJSWAsJufKwpKakgE6Me6-x7bTDk_xfzoYq5MlX78waS6wpKxFG4JzSgfeM2dEB4yFIL1yQlIVBKpvSI3qkGrRpNEOppqbF3k3NEEK0pqQlW29WyBHG2euj1CjlCZ7RanQ9Roj5UOehcVC_CcEEt1i0N9YQqohQnHWsJ4TwC8YK4489D7N_Lb78x7zDhEsmf3hH-xtpe0hV:1jkc1f:GIvduPkf7u55IcvD6uIb9Tf36C"\r\n\r\n'
200 OK    : send: b'GET /join/login-popup/?locale=en_US&display_type=popup HTTP/1.1\r\nHost: www.example.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0\r\nAccept-Encoding: gzip, deflate\r\nAccept: text/html\r\nConnection: keep-alive\r\nSec-Fetch-Site: none\r\nAccept-Language: en-US,en;q=0.5\r\nReferer: https://www.example.com/\r\nCookie: ud_rule_vars="eJx9jcsOgyAURH_FsG01F-RR-RYSQvFiSU1JEd0Y_73EdNNNV7OYOXN2UlyesOBot7jEkrIOzI-USRSMI-e8d4pS4eVNShW84lL7lJ4RiW7IbsjslmIzvlesObqCphaGMGDQgmwpb1ivmdIcOgqc3sQFQAMYcq2rEHOlTvE_th86OUghfthTXNLqH7ZkF0L0dklr9mg3l6O7z9-3lCf3it6QgxwfFqJHgg==:1jkc2O:xYHFSpCEwO0CvLM-77JS2xsvXg4"\r\n\r\n'

hatırlatma: 403 sebebi cloudflare. ssl lazım :confused:

Bu kod istek yapmiyor, bir modulu import edip ayar yapiyor.

Istekler ayni degil, bir kere 403 donduren 5 byte daha kisa. Hangileri TLS’li anlasilmiyor.

Burpsuite’in sonuclari etkilemesiyle ilgili hic bir sey yapamam. Musteri temsilcinle veya teknik destekle gorusmelisin.

TLS kullan zaten, kullanma demiyorum. Kullandiginda cikan sorunu goremiyorum diyorum.

1 Beğeni