Modüller | requests

Bloga başlamadan önce HTTP vs HTTPS isimli blogu okumanız, bu blogu anlamanız açısından önemlidir. Tercihen; IP, DNS okunabilir.

'Request' kelimesi, 'istek' anlamına gelir. Biz bir web sitesine request (istek) atarız, web sitesi de bize bir response (yanıt) döndürür. Bu yanıtlar, sitenin durumuna bağlı olarak değişkenlik gösterecektir. Dolayısıyla yukarıda linkini verdiğim blogu okumanız önemlidir. requests modülü, web siteleri ile alakalı işlemleri yapmamız açısından bize kolaylıklar sağlayan bir modüldür. requests modülü, daha kapsamlı işler için tek başına kullanılmaz; yanına ek olarak çeşitli modüller de kullanılır. İlerleyen zamanlarda bazılarını göreceğiz.

Şimdi, bu modülü import edebilmemiz için cihaza yüklenmiş olması lazım. Dolayısıyla aşağıdaki komutlardan birini verip bu modülü cihazınıza yükleyebilirsiniz.

pip install requests

pip3 install requests

Bende zaten var olduğu için işlem hemen sonlandı. Ancak sizde yoksa yüklenmesi için biraz beklemeniz gerekebilir. Eğer '(Y/n)' tarzında sorular sorarsa Y tuşuna basıp devam edebilirsiniz.

İlk önce cmd konsoluna girip Python Shell'ine bağlanmak istiyorum. Hemen sonrasında import requests diyerek Shell'e bu modülü tanıtıyorum.

Bu işlemleri yaptıktan sonra bu modül hakkında bilgi almak adına 'dir(requests)' komutunu veriyorum.

Gördüğünüz gibi bu modül ile yapabileceklerimizi bize gösterdi. Yeşil kutucuk içerisine aldıklarım ise muhtemelen en sık kullanacağınız fonksiyonlardır. Bu yazıda göstereceğim fonksiyonlar dışında merak ettiğiniz, gözünüze çarpan fonksiyonları internetten araştırabilirsiniz.

Şimdi VS Code'a girelim, bu modülü import edelim ve ilk işlemimize başlayalım.

requests.get()

import requests dedikten sonra sitemizin URL adresini bir değişkene verdim. Web siteleriyle iş yapacaksak bir URL adresine sahip olmamız lazım, değil mi? Bu adresi de sürekli olarak kullanacağım için bunu 'url' isminde bir değişkene atadım.

Hemen sonrasında requests.get(url) ifadesini verdim. Buradaki 'get' kelimesinin anlamı, 'almak'tır. get fonksiyonunun içerisine url değişkenimizi yani sitemizin URL adresini yazdım. Dolayısıyla bu komut sayesinde biz, https://blog-cyberworm.com sitesinden veri aldık. Son olarak; requests.get(url) ifadesini getRequest isimli bir değişkene atadık ve bunu ekrana yazdırdık.

Çıktı kısmında '<Response [200]>' şeklinde bir ifade mevcut. Blogun başında dediğim gibi biz, web sitesine request atarız, web sitesi de bize response döndürür. Buradaki 200'ün anlamı ise 'OK' şeklindedir yani siteye yaptığımız get request başarıyla sonuçlanmıştır.

Yaptığımız bu şey, Google tarayıcısını açıp siteye girmekle aynı şeydir. Bu, sadece kodlara dökülmüş hâlidir.

Bu size oldukça anlamsız gelebilir. Ancak, durumu kaydedebilir ve onunla çeşitli işlemler yapabilirsiniz. Mesela;

Çıktı kısmında da gördüğünüz üzere 7 ve 8. satırlar True sonucunu döndürdü. Aslında ikisi de aynı şeyi ifade eder sadece yazım tarzları biraz değişiktir. 

Yedinci satırda requests.get(url) dedikten sonra parantezin dışına '.ok' ifadesini verdik. Biraz önce 200 kodunun OK anlamını taşıdığını söylemiştim. Bu noktada biz bu kod sayesinde bu sitenin get isteklerine karşılık verip vermediğini rahatça görebiliriz. Eğer karşılık veriyorsa True, vermiyorsa da False döndürecektir.

Sekizinci satırda ise aynı şeyi bir değişken ile yaptık. Zaten requests.get(url) ifadesini getRequest değişkenine atadığımız için bir sorun olmayacaktır ve getRequest.ok ifadesini kullanabileceğiz.

İsterseniz bunu biraz daha farklı bir şekle sokabiliriz:

Burada, az önceki True-False ilişkisini bir koşula döktüm. Eğer getRequest.ok ifadesi True veya False ise çeşitli işlemler yaptırabilirsiniz. Örneğin ilerleyen zamanlarda web sitesini otomatik açabileceğimiz bir modül göreceğiz. requests modülü ile o modülü birleştirip bir şeyler yapma olanağınız mevcut; "getRequest.ok == True ise siteyi aç" tarzında kodlar yazabilirsiniz.

status_code isimli parametremiz de sitenin hâlihazırda ne durumda olduğunu gösteren bir koddur. Bunu, direkt olarak '.ok' gibi kullanabilirsiniz.

text isimli parametre ise size, sayfanın kaynak kodunu gösterecektir. 'getRequest.text' şeklinde kullanabilirsiniz.

headers parametresini de kullanabilirsiniz. Bu, sitenin header'ını size gösterecektir. 'getRequest.headers' şeklinde kullanabilirsiniz.

Bazen herhangi bir siteye request yolldığınızda site çalışıyor olsa bile 200 yerine 403 kodunu görebilirsiniz. Aslında normal bir şekilde siteye girip aynı işlemleri sağlayabiliyor ama bunu kod ile yapamıyor olabilirsiniz. Bunun sebebi sitenin, girişinizi yazılım ile yaptığınızı tespit etmesi ve engellemesinden kaynaklanır. Peki, bunu nasıl aşarsınız?

Her cihazın User Agent dediğimiz bir yapısı vardır. User Agent dediğimiz şey basitçe, internetteki her yazılım veya tarayıcı için benzersiz olan, cihazınız ve işletim sisteminiz hakkında teknik bilgiler içerene bir metin dizisidir. Yani siz, bir siteye gireceğiniz zaman aslında User Agent size çok yardımcı oluyor. O zaman bizim bu veriye erişmemiz gerekiyor.

Bunun için internette direkt olarak "what is my user agent" şeklinde bir aratma sağlarsanız bunu göreceksinizdir.

Kırmızı kutunun altında yer alan şey, sizin user agent bilginizdir. Bunu görmenin başka bir yolunu da göstermek istiyorum.

Örneğin sitemize girdiğinizde boş bir alana sağ tıklayıp 'Inspect' veya 'İncele' dediğiniz zaman sağ tarafta bir pencere açılacaktır.

Açılan pencereyi sola doğru kaydırırsanız alan genişleyecektir. Bunu yaptıktan sonra "Network" kısmına gelmeniz ve sayfayı bir defa yenilemeniz yeterli olacaktır. Bu işlemi yaptıktan sonra aşağıdaki gibi bir görüntü sizi karşılayacaktır.

Siyah ile kapattığım yerlerde çeşitli bilgiler mevcuttur. Sol taraftaki siyah yerde ise çeşitli item'lar bulunur ve user agent genel olarak o sırada girdiğiniz adresin içinde bulunur. Biz de blog-cyberworm.com adresine girdiğimiz için sol taraftaki pencereden bu kısmı seçiyoruz. Seçtikten sonra aradığımız şey en aşağıda user-agent şeklinde görüncektir.

Bunu bulduktan sonra kod sayfamıza geri dönüp bir sözlük oluşturmamız gerekiyor.

Sözlüğümüzü oluşturduktan sonra requests.get(url) kısmına bir virgül ekleyip "headers=" anahtar kelimesini sözlüğümüze eşitliyoruz ve olay bitiyor: 'requests.get(url, headers=userAgent)'.

requests.post()

post metodu ise bir form, kullanıcı adı - parola ve benzeri bilgileri girip siteye yolladığımızda kullanılan metottur. Blogun başında verdiğim blogu okursanız daha net anlayacaksınızdır.

Sitemizde herhangi bir üye oluşturma kısmı veya form bulunuyor. Peki, buna post metodunu uygulayabilir miyiz?

Dönen response değeri 405 oldu. Peki, 200 kodu eğer "OK" yani "başarılı" anlamına geliyorsa bu ne anlama geliyor?

post request yaptığımız zaman gelen 405 durum kodu, sitenin herhangi bir post metodunu desteklemediğini gösterir. Zaten az önce de söyledim; sitemizde herhangi bir giriş yapma yeri veya ona benzer bir yapı söz konusu değil.

Tek başınızaysanız ve gelen kodun ne anlama geldiğini bilmiyorsanız aşağıdaki gibi basit bir araştırma ile bunu öğrenebilirsiniz. Örneğin 405'in ne olduğunu bilmediğinizi varsayalım:

Peki, aynı kodu bir de Trendyol'un giriş yapma sayfasında denersek ne olur?

Sadece trendyol.com adresine girip giriş yapma bölümüne girdim ve oradaki URL adresini kopyalayıp koduma geçirdim. Gördüğünüz gibi dönen yanıt 200 oldu yani post metodumuz başarılı oldu.

requests.get() veya requests.post() komutlarıyla yapabileceklerinizi şu şekilde görebilirsiniz:


Yayınlanma Tarihi: 2022-11-25 16:24:30

Son Düzenleme Tarihi: 2022-11-27 18:17:58