Python Requests Modülü Kullanımı
Python Requests modülünü kullanarak HTTP istekleri yapmayı öğrenin. GET ve POST istekleri, parametre ve header ekleme, JSON veri alışverişi, hata yönetimi ve cookies kullanımı hakkında kapsamlı bilgi edinin.
Requests Nedir?
Requests modülü, HTTP isteklerini basit, anlaşılır bir şekilde kullanmamıza olanak tanıyan bir Python modülüdür. Genellikle veri çekme, API’lar ile çalışma ve otomasyon programları yazmak için kullanılır. Hadi nasıl kullanılıyormuş bakalım.
HTTP İsteklerini Yakalamak İçin Express.js Kullanımı
Bu kısımda atacağımız HTTP isteklerini daha iyi görebilmemiz için Express.js ile basit bir API kurulumunu göstereceğim. Eğer bununla uğraşmak istemiyorsanız Pipedream gibi istekleri yakalayan bir online hizmet kullanabilirsiniz. Hadi kuruluma başlayalım.
Not: Node.js’in bilgisayarınızda kurulu olması gerekmektedir.
node -v
ile kurulu olup olmadığını kontrol edebilirsiniz.
- İlk olarak
package.json
dosyamızınpm init -y
komutu ile kuralım. express.js
paketininpm install express
komutu ile kuralım.server.js
adında bir dosya oluşturup aşağıdaki kodları dosyaya yapıştıralım.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const express = require("express");
const app = express();
const port = 3000;
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.get("/", (req, res) => {
console.log("Get istegi alindi.");
console.log("Header:", req.headers);
console.log("Full URL:", `${req.protocol}://${req.hostname}${req.originalUrl}`);
console.log("-----------------------------------------");
res.send("Get istegi geldi.");
});
app.post("/post", (req, res) => {
console.log("Post istegi alindi.");
console.log("Header:", req.headers);
console.log("Body:", req.body);
console.log("-----------------------------------------");
res.send("Post istegi geldi.");
});
app.listen(port, () => {
console.log("http://localhost:" + port);
});
Son olarak sunucumuzu çalıştırmak için node server.js
komutunu çalıştıralım. Artık sunucumuz doğru bir şekilde çalışmaktadır.
Requests Kurulumu
Requests modülümüzü sistemimize kurmamız için pip
Python paket yöneticisinin kurulu olması gerekmektedir. Eğer Python kurulu ise pip
yanında kurulu olarak gelmektedir. Terminale pip
yazarak kurulu olup olmadığını kontrol edebilirsiniz.
Requests modülümüzü kurmak için aşağıdaki komutu kullanalım:
1
pip install requests
Temel Kullanımı
Get İsteği
Get isteği en çok kullanılan HTTP isteklerinden biridir. Genellikle sunucudan bir şey talep etmek için kullanılır. Get isteğinin nasıl kullanıldığına dair kolay bir örnek:
1
2
3
4
5
import requests
URL = "http://127.0.0.1:3000"
res = requests.get(URL)
print(res.text)
Express.js sunucu çıktısı:
1
2
3
4
5
host: '127.0.0.1:3000',
'user-agent': 'python-requests/2.32.3',
'accept-encoding': 'gzip, deflate',
accept: '*/*',
connection: 'keep-alive'
Post İsteği
POST isteği sunucuya veri gönderimi için kullanılan bir HTTP isteğidir. Yaygın olarak form işlemlerinde kullanılır. POST isteğinin nasıl kullanıldığına dair kolay bir örnek:
1
2
3
4
5
6
7
import requests
URL = "http://127.0.0.1:3000/post"
post_data = {"username": "ali", "password": "ali123"}
res = requests.post(URL, data=post_data)
print(res.text)
Express.js sunucu çıktısı:
1
2
3
4
5
6
7
8
9
10
Header: {
host: '127.0.0.1:3000',
'user-agent': 'python-requests/2.32.3',
'accept-encoding': 'gzip, deflate',
accept: '*/*',
connection: 'keep-alive',
'content-length': '28',
'content-type': 'application/x-www-form-urlencoded'
}
Body: { username: 'ali', password: 'ali123' }
HTTP İsteklerine Parametre Ekleme
HTTP isteklerine parametre eklemek için params
veya data
argümanlarını kullanırız.
Params Kullanımı
Örnek kullanım:
1
2
3
4
5
6
7
import requests
URL = "http://127.0.0.1:3000"
params = {"query": "python"}
res = requests.get(URL, params=params)
print(res.url)
Express.js sunucu çıktısı:
1
2
3
4
5
6
7
8
Header: {
host: '127.0.0.1:3000',
'user-agent': 'python-requests/2.32.3',
'accept-encoding': 'gzip, deflate',
accept: '*/*',
connection: 'keep-alive'
}
Full URL: http://127.0.0.1/?query=python
Full URL kısmında gördüğünüz gibi istek URL’sine ?/query=python
sorgusunu ekledi.
Data Kullanımı
Örnek kullanım:
1
2
3
4
5
6
7
8
import requests
URL = "http://127.0.0.1:3000/post"
post_data = {"name": "osman", "surname": "deli"}
res = requests.post(URL, data=post_data)
print(res.text)
Express.js sunucu çıktısı:
1
2
3
4
5
6
7
8
9
10
Header: {
host: '127.0.0.1:3000',
'user-agent': 'python-requests/2.32.3',
'accept-encoding': 'gzip, deflate',
accept: '*/*',
connection: 'keep-alive',
'content-length': '23',
'content-type': 'application/x-www-form-urlencoded'
}
Body: { name: 'osman', surname: 'deli' }
Yukarıda da gördüğünüz gibi data
parametresine verdiğimiz veri body ile gönderildi.
Header Ekleme
Requests modülünde header önemlidir çünkü bazı sunucular Python user-agent’ını kabul etmeyebiliyor.
1
2
3
4
5
6
7
8
9
10
import requests
URL = "http://127.0.0.1:3000"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
}
res = requests.get(URL, headers=headers)
print(res.text)
Express.js sunucu çıktısı:
1
2
3
4
5
6
7
8
Header: {
host: '127.0.0.1:3000',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'accept-encoding': 'gzip, deflate',
accept: '*/*',
connection: 'keep-alive'
}
Full URL: http://127.0.0.1/
Böylelikle “user-agent” bölümünü istediğimiz gibi değiştirdik.
JSON Veri Alışverişi
Günümüzde API’lar çoğunlukla JSON formatında veri alışverişi yaparlar. Hadi Requests modülünde bunu nasıl yapacağımızı öğrenelim.
JSON verisi gönderme:
1
2
3
4
5
6
7
8
9
import requests
URL = "http://127.0.0.1:3000/post"
json_data = {"password": "123123"}
res = requests.post(URL, json=json_data)
print(res.text)
Express.js sunucu çıktısı:
1
2
3
4
5
6
7
8
9
10
Header: {
host: '127.0.0.1:3000',
'user-agent': 'python-requests/2.32.3',
'accept-encoding': 'gzip, deflate',
accept: '*/*',
connection: 'keep-alive',
'content-length': '22',
'content-type': 'application/json'
}
Body: { password: '123123' }
Gördüğünüz gibi json
parametresi ile gönderdiğimiz veriyi body ile yakaladık.
JSON verisi alma: Öncelikle Express.js sunucumuz şu anda bir JSON döndürmüyor bu yüzden res.send("Get isteği geldi.");
satırını bulup res.json({key: "value"});
ile değiştirmeliyiz. Ardından terminalde Ctrl + c
ile sunucumuzu durdurup node server.js
komutu ile tekrar çalıştırmamız gerekmektedir.
1
2
3
4
5
6
7
import requests
URL = "http://127.0.0.1:3000"
res = requests.get(URL)
print(res.json())
Express.js sunucu çıktısı:
1
2
3
4
5
6
7
8
Header: {
host: '127.0.0.1:3000',
'user-agent': 'python-requests/2.32.3',
'accept-encoding': 'gzip, deflate',
accept: '*/*',
connection: 'keep-alive'
}
Full URL: http://127.0.0.1/
Python çıktısı:
1
{'key': 'value'}
Hata Yönetimi
Requests modülü ile HTTP isteğinde bulunurken herhangi bir hatayı kontrol edebilmek için response.raise_for_status()
fonksiyonunu kullanırız. Bu fonksiyon HTTP isteğinin yanıtını kontrol eder ve yanıt 200-399 arasında değilse geriye HTTPError
hatasını fırlatır.
Kullanım:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests
URL = "http://127.0.0.1:3000"
try:
res = requests.get(URL)
res.raise_for_status()
# ....
except requests.exceptions.HTTPError as error:
print(f"HTTP error: {error}")
except Exception as error:
print(f"Other error: {error}")
Böylelikle istek sırasında oluşabilecek hataları rahatlıkla yakalayabiliriz.
Cookies Yönetimi
HTTP İsteğine Cookie Ekleme
1
2
3
4
5
6
7
8
import requests
URL = "http://127.0.0.1:3000"
new_cookies = {"session_id": "akldjfas32"}
res = requests.get(URL, cookies=new_cookies)
print(res.text)
Cookielere Erişim
1
2
3
4
5
6
7
8
9
10
11
12
import requests
URL = "http://127.0.0.1:3000"
res = requests.get(URL)
cookies = res.cookies
for cookie in cookies:
print(cookie.name, cookie.value)
print(res.text)
Cookieler hakkında bilmeniz gereken birkaç önemli bilgi daha var. Cookieler name, value, domain, path, expires, secure vs. gibi birçok özellik ile cookienin ne zaman ve nasıl kullanacağını belirtir. Güvenlik nedeniyle bazı çerezler sadece https üzerinden gönderilir, bu secure özelliği ile alakalıdır.
Python Requests Modülü Response Nesnesinin Fonksiyon ve Özellikleri
- res.status_code: HTTP yanıtının kodunu döndürür.
- res.headers: HTTP yanıtının headers’ını döndürür ve
res.headers['accept-language']
şeklinde kullanabilirsiniz. - res.cookies: HTTP yanıtının cookie’sini döndürür.
res.cookies['id']
şeklinde kullanabilirsiniz. - res.url: HTTP yanıtının URL’sini döndürür.
- res.encoding: HTTP yanıtının kodlama türünü döndürür.
- res.text: HTTP yanıtının body’sini string formatında döndürür.
- res.content: HTTP yanıtını raw bir şekilde döndürür.
- res.json(): HTTP yanıtının body’sini JSON formatında döndürür.
- res.raise_for_status(): HTTP yanıtının kodu 200-399 arasında değilse bir
HTTPError
hatasını fırlatır. - res.iter_lines(decode_unicode=False): HTTP yanıtını itere edilebilir bir şekilde satır satır döndürür ve
for ... in
yanıtına satır satır erişebilirsiniz. - res.iter_content(chunk_size=1024, decode_unicode=False): HTTP yanıtını belirli boyutlarda parçalara ayırarak döndürür.
Daha fazla ayrıntılı bilgi için: https://requests.readthedocs.io/en/latest/
Comments powered by Disqus.