Python Requests Kütüphanesi
requests
minimalist bir python modülüdür. Bu modül ile en temel şekilde http/https protokollerine yönelik request/response işlemlerimizi gerçekleştirebiliriz.
Requests modülünü pip ile kurmak için;
1 | pip3 install requests |
Kaynak koddan kurmak için ise;
1 | git clone git://github.com/kennethreitz/requests.git |
indirdiğiniz dizine girip python3 setup.py install
diyerek kurabilirsiniz.
Everything is request
Artık modülümüzü kullanmaya başlayabiliriz.
1 | import request |
En basit haliyle; musana.net adresine get metoduyla bir istekte bulunduk ve artık elimizde req
adında bir nesne mevcut. İstekte bulunduğumuz bağlantıya ait bütün bilgilere req
nesnesi üzerinden erişebiliriz.
HTTP metodları ile istek yapmak
GET metodu ile ilgili parametre(ler)ye değer vermek veya POST metodu ile form elemanlarına değer verip göndermek için özellikle sözlük veri tiplerinden yararlanıyoruz. Aşağıdaki kod blogunu inceleyerek verilen parametreye bağlı olarak oluşan url yapısına dikkat ediniz.
1 | import requests |
Diğer HTTP metotlarını kullanarak request göndermek istediğimizde ise değişen tek şey metot isimleridir.
1 | import requests |
HTTP Başlık Bilgisi Ekleme
İstekte bulunurken HTTP başlık bilgilerini(Referrer, host, cookie, user-agent vs) eklemek isteyebiliriz. Bunun için methodumuza headers
parametresini tanımlayacağız ve değerini ise sözlük veri tipini kullanarak {"http-baslık-adı":"baslık-degeri"}
şeklinde vereceğiz. Örneğin bir web uygulamasının web sürümünde çıkan captcha, mobil sürümünde çıkmayabilir. Bu durumda kolaylıkla olası bir brute-force saldırısı düzenlenebilir. HTTP başlıklarından user-agent
değerini mobil bir telefonun browser bilgilerini ekleyerek captcha’yı bypass edebiliriz.
1 | import requests |
Yukarıdaki kod musana.net sitesine Samsung Glaxy S6 telefonunun kullanıdğı tarayıcı bilgilerini kullanarak istekte bulunacak ve hedef site gelen user-agent
bilgisine göre cevap döndürecektir. Örneğimiz üzerinden gidersek captcha çıkmayacağı anlamına gelir bu. Diğer http header bilgilerini de aynı bu yöntemle istediğiniz şekilde değiştirebilirsiniz.
HTTP Response İşlemleri
İstek yaptığımıza göre artık dönen cevabı nasıl işleyebileceğimize bakalım.
1 | import requests |
Yaptığımız isteğe karşılık dönen HTTP Response kodunu öğrenmek için ise;
1 | import requests |
Sunucudan dönen cevabın başlık bilgilerine erişebilmek için ise request nesnemize headers
nesne değişkeni üzerinden erişebiliriz. Bu değer bize bütün header response bilgisini sözlük tipinde verecektir. Daha spesifik başlıklara erişmek için sözlük yapısını kullanabiliriz. Örneğin;req.headers.get("content-type")
diyerek içeriğin hangi formatta ve hangi karakter setini kullandığı bilgisine ulaşabiliriz. Erişmeye çalıştığımız başlık değeri yok ise sonuç None
dönecektir.
1 | import request |
Dosya Göndermek
Her zaman string bir ifade göndermeyebiliriz. Karşı sunucuya bir dosya yüklemek isteyebiliriz bunun için ise files
parametresini tanımlayıp değerine sözlük veri tipi yardımıyla bir dosya adı veya dosya içeriğini veriyoruz.
1 | import requests |
Bir string ifadeyi istediğimiz bir dosya formatında göndermek için ise;
1 | import requests |
Timeout, SSL, HTTP Basic Auth
Göndereceğimiz isteğin zaman aşım süresini kontrol etmek isteyebileceğimiz durumlar olabilir. Bu durumda timeout
parametesine dönecek olan cevabın verdiğimiz zaman değerini aşması durumunda isteğimiz zaman aşımına uğrayacaktır. Meydana gelen ConnectTimeoutError
hatasını exception handling ile kontrol edebiliriz.
1 | import requests |
Request göndereceğimiz bağlantının SSL desteği varsa yani HTTPS protokolünü kullanıyorsa bağlanmak istediğimiz zaman requests.exceptions.SSLError
hatasını alabiliriz. Bu durumda verify
parametresine sertifika yolumuzu belirterek istek gönderebiliriz.
1 | import requests |
Ayrıca verify
parametresine False
değerini vererek doğrulanmış SSL sertifikasını göz ardı edebilirsiniz.
HTTP Basic Authentication kimlik doğrulamasında login olabilmek için ise;
1 | from requests.auth import HTTPBasicAuth |
requests modülünü kullanarak yapabileceğimiz en temel işlemler bunlar olmakla beraber daha fazlası için resmi dökümantasyonu inceleyebilirsiniz.
Sağlıcakla kalınız.