Python Requests modülü

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Ya istiklâl ya ölüm
Seçkin Üye
Katılım
7 May 2019
Mesajlar
308
Çözümler
2
Tepki puanı
25
Ödüller
7
7 HİZMET YILI
Python Requests Modülü Nedir.
Talepler modülü, sloganında da olduğu gibi -Http for People-, "urllib3" tabanlı organik HTTP seçeneklerinden yarayan modüldür.

Yükleme:
İstekler modülü en kolay şekilde "pip install requests" şeklinde yüklenebilir.

Yapılabilecekler:

-> Brute Force atak scripti yazabilirsiniz.
-> HTTP istekleri gönderebilirsiniz.
-> Bir sitenin unicode dönüşüm biçimini görebilirsiniz.
Ve daha niceleri ...

Kullanım örnekleri.

Kod:
>>> import requests #modülümüzü içe aktaralım
>>> r = requests.get('https://herhangi bir site/login', auth=('Frementaus', ŞİFRE)) #herhangi site'a bağlanalım. Herhangi bir site olabilir bu
>>> r.status_code #Başarılı olmuş mu diye bakalım
200

Gördüğümüz gibi HTTP 200 döndürdü. Nedir bu 200?:
200 OK Tamam
201 Created Oluşturuldu
202 Accepted Onaylandı
203 Non-Authoritative Information Yetersiz Bilgi
204 No Content İçerik Yok
205 Reset Content İçeriği Baştan al
206 Partial Content Kısmi İçerik
207 Multi-Status WebDAV :Çok-Statü

210 Content Different WebDAV :Farklı İçerik

Tabii hepimiz en çok '404'ü biliriz "Sayfa bulunamadı". 200'de başarılı olduğunu gösterir. Şimdi unicode biçimine bakalım isterseniz:

Kod:
>>> r.encoding
'utf-8'

Gördüğümüz gibi utf-8 miş. Sitenin görüntülenen sayfasındaki içerik kodlarına da ulaşabiliriz (Chrome da ctrl+u şeklinde eriştiğimiz)

Kod:
>>> r.text

GET METODUNDA PARAMETRELER:

Üstte get metodundan küçük bir örnek vermiştik. Site url'sindeki parametreleri kullanarak sitedeki dosyalar değişkene atanabilir.
Misalen..
"
Bağlantıları görmek için lütfen Giriş Yap
"
Bu örnek sitemiz olsun. (SQL açığı var bu arada. Anka belki ilgilenir)
burda 'id' değerinden sonra gelen '31' parametresi ayarlanabilir.

Kod:
import requests
r = requests.get("http://www.sallatykka.com/web/index.php",
                 params = {'id':31})
print(r.url)

Bize tam url'yi verecek, pekii bu ne işimize yarayacak?

-->Eğer biz burdaki id değerini sürekli 1 arttırıp base değerinden farklı bir sayı döndürenleri (bkz:HTTP durum kodlar) ayırırsak bir "web crawler" yapabiliriz.

Örnekle anlatayım:
  • Request modülünü içe aktaralım
  • Kullanıcıdan bir id değeri isteyelim
  • id değerini url üzerinde yerine koyalım
  • 200 döndürüyorsa bir listeye yazalım.

Kod:
import requests
id_deger = int(input('[*]Bir id değeri girin: '))
r = requests.get("http://www.sallatykka.com/web/index.php",
                 params = {'id':id_deger})
if r.status_code == 200:
    print('Bulundu!')
    print(r.url)

Kod:
[*]Bir id değeri girin: 32
Bulundu!
http://www.sallatykka.com/web/index.php?id=32
>>>


JSON:

Öncelikle... Json nedir?
Google'a göre JSON:
"JSON, programlama dilinden bağımsız olan Xml'e alternatif olarak kullanılan javascript tabanlı veri değişim formatıdır. JSON'un amacı veri alış verişi yaparken daha küçük boyutlarda veri alıp göndermektir.Bu özellikleri sayesinde JSON ile çok hızlı web uygulamaları oluşturabilir."

Örneğin:
Kod:
{
   "tur":"met.l",
   "grup":"System of a Down"
}

Peki biz bu jsondan nasıl faydalanırız?
requests modülünün .json() özelliği tam da bunun için. Yukarıda GET parametresinden bahsetmiştik. Burda küçük bir kod parçacığı ile json'u decode edebiliyoruz

Örnek:
Kod:
>>> import requests
r = requests.get('https://api.github.com/events')
>>> r.json()
[{'type': 'CreateEvent', 'id': '5226537554', 'actor': {'id': 12762300, 'gravatar_id': '', ...

diye başlayıp uzuuunca devam eden bir metin döndürdü gördüğünüz gibi.
Ayrıca, json kütüphanesi ile de beraber kullanılabilir.

Kod:
>>> import json
>>> import requests
>>> url = "https://api.github.com/some/endpoint"
>>> hckn0 = {'some': 'data'}
>>> r.requests.post(url, data=json.dumps(hckn0))
>>> r = requests.post(url, data=json.dumps(hckn0))
>>> print(r.text)
{"message":"Not Found","docu_mentation_url":"https://developer.github.com/v3"}

Üstteki kod parçacığında bahsetmediğimiz tek şey POST methodu, hemen geçelim

POST:
Post istekleri genellikle url'de görünmesini istemediğimiz zamanlarda kullanılır. Misal "get" metodunda yazdığımız veriler adres çubugunda gösterilirdi fakat POST'da gösterilmez.
Yani misalen web geçmişinde, önceki bir sitenin adres çubuğunda bilgilerimizin görünmesini engeller.

Python'da kullanımı:

Kod:
>>> payl = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payl)
>>> print(r.text)
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "key1": "value1",
    "key2": "value2"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Content-Length": "23",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.13.0"
  },
  "json": null,
  "origin": "62.248.25.231",
  "url": "http://httpbin.org/post"
}

Peki aynısını GET ile yapsaydık ne olacaktı?
Kod:
>>> r = requests.get("http://httpbin.org/post", data=payl)
>>> print(r.text)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>

Farkı gördünüz değil mi? işte POST metodu tam da burada yardımıza koşuyor.

Dönüt başlıkları:
Az önceki "'tur':'met.l'" örneğin aklımıza gelsin. Diyelimki onlarca başlık var ve biz birisini seçmeliyiz. Nasıl yapardık?
".headers" denilen yapı bu günler için aranan kan. Kullanımı get ve post'a oldukça benzer de olsa küçük farklılıklar mevcut.

Kod:
r = requests.post("http://httpbin.org/post", data=payl)
>>> r.headers['Content-Type']
'application/json'
>>>

tabii ki, -çoğu zaman olduğu gibi- burda da farklı yöntemler mevcut.

Kod:
>>> r.headers.get('content-type')
'application/json'

SESSION:

HTTP üzerinden bağlantılar yaparken bazen "cookie" kullanmamız gerekir. Bu gibi durumlarda "session" kullanırız. Ayrıca aynı host'a birden fazla istek gönderecekseniz, TCP tekrarlandığında, önemli bir performans artışı sağlar. (Örnek: Brute Force)
Basitçe;
Kod:
>>> import requests
>>> s = requests.Session()
>>> s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
<Response [200]>
>>> r = s.get('http://httpbin.org/cookies')
>>> print(r.text)
{
  "cookies": {
    "sessioncookie": "123456789"
  }
}

>>>

Bu şekilde kullanılır, ayrıca kendi yazdığım wordpress brute force tool'da da kullanımını görebilirsiniz.

Kod:
r = session.post(site, data={"log":"admin","pwd":sifre},timeout=5)


Bu günlük bu kadar, kendinize çok iyi bakın. İyi Forumlar Dilerim

 
Son düzenleme:
Onaylı Üye
Katılım
7 Tem 2016
Mesajlar
50
Tepki puanı
4
9 HİZMET YILI
çok iyi bir konu olmuş request her proglamlamada çok önemlidir işe yarar
 
Üye
Katılım
7 Mar 2019
Mesajlar
20
Tepki puanı
2
Ödüller
4
Yaş
25
7 HİZMET YILI
request ile fill a form nasıl yaparım?
 
Onaylı Üye
Katılım
25 Kas 2018
Mesajlar
50
Tepki puanı
0
Ödüller
3
Yaş
31
7 HİZMET YILI
exactly what i was looking for simple and helpfull request handlers, thanks for sharing : Image:
 
who knows when you will be gone
Seçkin Üye
Katılım
31 Mar 2018
Mesajlar
334
Tepki puanı
105
Ödüller
9
Yaş
25
8 HİZMET YILI
thanksss
 
Seçkin Üye
Katılım
6 Eki 2018
Mesajlar
306
Çözümler
1
Tepki puanı
76
Ödüller
7
7 HİZMET YILI
eline sağlık güzel anlatım olmuş kullanacağım
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...