Pustaka requests
Pustaka requests
adalah salah satu pustaka yang paling populer dan banyak digunakan dalam Python untuk melakukan permintaan HTTP. Pustaka ini menyembunyikan kompleksitas dari permintaan di balik API yang indah dan sederhana, memungkinkan Anda mengirim permintaan HTTP/1.1 dengan mulus. Dengan menggunakan pustaka ini, Anda dapat menambahkan konten seperti header, data formulir, file multipart, dan parameter melalui pustaka Python sederhana ke permintaan HTTP.
Menginstal Pustaka requests
Untuk menginstal requests
, jalankan perintah pip berikut:
$ pip instal requests
Permintaan GET
Permintaan GET adalah salah satu metode HTTP yang paling umum. Digunakan untuk mengambil atau membaca data dari resource. Dalam pustaka requests
Python, membuat permintaan GET cukup mudah:
import requests
response = requests.get('https://api.github.com')
# Now we have a Response object called 'response'.
print(response.status_code)
200
Permintaan POST
Permintaan POST digunakan untuk mengirim data ke server untuk membuat resource baru. Data yang dikirim ke server dengan POST disimpan dalam tubuh permintaan. Berikut adalah contoh permintaan POST menggunakan requests
:
import requests
data = {
'name': 'John',
'age': '30'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.status_code)
print(response.json())
Pada contoh ini, kita mengirimkan sebuah kamus sebagai data, yang akan diubah oleh requests sebelum dikirimkan.
Permintaan PUT
Permintaan PUT mirip dengan permintaan POST karena mengirimkan data ke server. Perbedaannya adalah permintaan PUT bersifat idempoten, yang berarti melakukan permintaan PUT yang sama ke URL multiple kali akan selalu menghasilkan hasil yang sama. Berikut adalah contoh permintaan PUT:
import requests
data = {
'name': 'John',
'age': '30'
}
response = requests.put('https://httpbin.org/put', data=data)
print(response.status_code)
print(response.json())
Permintaan DELETE
Permintaan DELETE digunakan untuk menghapus resource dari server. Berikut adalah contoh permintaan DELETE:
import requests
response = requests.delete('https://httpbin.org/delete')
print(response.status_code)
print(response.json())
Permintaan HEAD
Permintaan HEAD mirip dengan permintaan GET, tetapi meminta server untuk mengembalikan hanya header respons, bukan resource yang sebenarnya (misalnya, tidak ada pesan dalam tubuh). Ini berguna untuk memeriksa ketersediaan resource atau memeriksa header respons tanpa mengunduh konten sebenarnya. Berikut adalah contoh permintaan HEAD:
import requests
response = requests.head('https://httpbin.org/get')
print(response.status_code)
print(response.headers)
Permintaan PATCH
Permintaan PATCH digunakan untuk menerapkan modifikasi parsial pada resource, bukan menggantikan seluruh resource seperti permintaan PUT. Berikut adalah contoh permintaan PATCH:
import requests
data = {
'name': 'John'
}
response = requests.patch('https://httpbin.org/patch', data=data)
print(response.status_code)
print(response.json())
Batas Waktu (Timeouts)
Secara default, permintaan tidak akan mencapai batas waktu kecuali Anda mengatur durasi batas waktu. Secara umum, disarankan untuk mengatur durasi batas waktu agar permintaan tidak terjebak secara tak terbatas. Berikut ini adalah cara mengatur batas waktu:
import requests
try:
response = requests.get('https://httpbin.org/delay/5', timeout=3)
except requests.exceptions.Timeout:
print("The request timed out")
Pada contoh ini, permintaan akan menghasilkan pengecualian requests.exceptions.Timeout
jika tidak selesai dalam 3 detik.
Pengalihan (Redirects)
Secara default, permintaan GET, OPTIONS, POST, PUT, PATCH, dan DELETE ke URL akan secara otomatis dialihkan ke lokasi baru (jika kode status respons adalah 301, 302, 303, 307, atau 308). Jika Anda tidak menginginkan perilaku ini, Anda dapat menonaktifkan pengalihan otomatis:
import requests
response = requests.get('http://github.com', allow_redirects=False)
print(response.status_code)
Pada contoh ini, permintaan GET ke http://github.com
akan mengembalikan kode status 301, tetapi tidak akan mengikuti pengalihan ke https://github.com
karena kita telah mengatur allow_redirects=False
.
Header
Header menyediakan informasi tambahan tentang permintaan atau respons. Untuk menambahkan header ke permintaan Anda, lewatkan sebuah kamus ke parameter headers
. Berikut ini caranya:
import requests
headers = {'user-agent': 'my-app/0.0.1'}
response = requests.get('https://httpbin.org/get', headers=headers)
print(response.json())
Mengirimkan Data JSON
JSON (JavaScript Object Notation) adalah format data umum yang memiliki berbagai penggunaan dalam pertukaran data, termasuk penggunaan pada layanan web. Banyak API bekerja dengan data JSON.
Berikut adalah contoh bagaimana Anda dapat mengirimkan data JSON:
import requests
import json
data = {
'name': 'John',
'age': 30
}
headers = {'Content-type': 'application/json'}
response = requests.post('https://httpbin.org/post', data=json.dumps(data), headers=headers)
print(response.json())
Pada contoh ini, kita pertama-tama mengimpor modul json
untuk mengubah kamus Python kita menjadi string JSON menggunakan json.dumps()
. Kita juga mengatur header Content-type
menjadi application/json
untuk memberi tahu server bahwa kita mengirimkan data JSON.
Mengirimkan Data Formulir
Data formulir biasanya digunakan untuk mengirimkan data dari formulir HTML ke server. Data dikirimkan sebagai serangkaian pasangan kunci-nilai, di mana setiap pasangan mewakili bidang formulir dan nilainya. Pustaka requests
memudahkan pengiriman data formulir tanpa perlu memformat secara manual.
Ada dua jenis data formulir yang dapat Anda kirimkan: application/x-www-form-urlencoded
dan multipart/form-data
. Yang pertama adalah default dan cocok untuk kebanyakan kasus, tetapi jika Anda perlu mengirimkan file, Anda harus menggunakan multipart/form-data
.
Berikut adalah contoh pengiriman multipart/form-data
:
import requests
data = {
'name': 'John',
'age': 30
}
files = {
'file': open('file.txt', 'rb')
}
response = requests.post('https://httpbin.org/post', data=data, files=files)
print(response.json())
Pada contoh ini, kita membuka sebuah file dalam mode biner, dan menyertakannya dalam kamus files
. Ketika kita membuat permintaan POST, requests
secara otomatis akan mengatur header Content-Type
menjadi multipart/form-data
, dan memformat data dan file sesuai kebutuhan.
Ingatlah untuk selalu menutup file setelah menggunakannya untuk membebaskan resource sistem. Cara yang baik untuk memastikan file ditutup dengan benar adalah dengan menggunakan pernyataan with
.
with open('file.txt', 'rb') as f:
files = {'file': f}
response = requests.post('https://httpbin.org/post', data=data, files=files)
Referensi