Learn
← Previous Next →

Hari 28: HTTP Requests & Konsumsi API

60 min Last updated 26 Mar 2026

Library requests

Library requests adalah cara termudah untuk melakukan HTTP request di Python.

pip install requests
import requests

# GET request
response = requests.get("https://api.github.com")
print(response.status_code)  # 200
print(response.headers["content-type"])
print(response.json())        # parse JSON otomatis

GET dengan Parameter

import requests

# Tanpa requests — URL manual
# url = "https://api.example.com/users?page=1&limit=10&sort=name"

# Dengan requests — lebih bersih
params = {"page": 1, "limit": 10, "sort": "name"}
r = requests.get("https://api.example.com/users", params=params)
print(r.url)   # URL dengan parameter otomatis terbentuk

# Contoh nyata: JSONPlaceholder (API dummy gratis)
r = requests.get("https://jsonplaceholder.typicode.com/users")
if r.status_code == 200:
    users = r.json()
    for u in users[:3]:
        print(f"{u['name']} — {u['email']}")

POST, PUT, DELETE

import requests, json

# POST — kirim data baru
payload = {"title": "Belajar Python", "body": "Hari ke-28", "userId": 1}
r = requests.post(
    "https://jsonplaceholder.typicode.com/posts",
    json=payload                 # otomatis set Content-Type: application/json
)
print(r.status_code)  # 201 Created
print(r.json())

# Dengan headers (misal: autentikasi)
headers = {"Authorization": "Bearer TOKEN_ANDA"}
r = requests.get("https://api.example.com/profile", headers=headers)

# PUT — update data
r = requests.put("https://jsonplaceholder.typicode.com/posts/1", json=payload)

# DELETE
r = requests.delete("https://jsonplaceholder.typicode.com/posts/1")
print(r.status_code)  # 200

Error Handling & Timeout

import requests
from requests.exceptions import ConnectionError, Timeout, HTTPError

def ambil_data(url, timeout=5):
    try:
        r = requests.get(url, timeout=timeout)
        r.raise_for_status()   # raise HTTPError jika status 4xx/5xx
        return r.json()
    except ConnectionError:
        print("Tidak bisa terhubung ke server")
    except Timeout:
        print(f"Request timeout setelah {timeout}s")
    except HTTPError as e:
        print(f"HTTP Error: {e.response.status_code}")
    except Exception as e:
        print(f"Error: {e}")
    return None

Session & Retry

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# Session — reuse koneksi, hemat resource
session = requests.Session()
session.headers.update({"User-Agent": "MyApp/1.0"})

# Auto-retry jika gagal
retry = Retry(total=3, backoff_factor=1)
adapter = HTTPAdapter(max_retries=retry)
session.mount("https://", adapter)

r = session.get("https://api.example.com/data")
session.close()

Assignment

Buat fungsi untuk mengambil data dari JSONPlaceholder API: (1) ambil semua posts dari user tertentu, (2) ambil detail user, (3) tampilkan ringkasan dalam format yang rapi.

Expected output:

=============================================
PROFIL USER #1
=============================================
Nama : Leanne Graham
Email : Sincere@april.biz
Kota : Gwenborough
Website : hildegard.org
Total post: 10
3 Post Terbaru:
- sunt aut facere repellat provident occaecat...
...
PY main.py
Solution
Output