Hướng Dẫn Sử Dụng Thư Viện Requests Của Python (Phần 2)

Hướng Dẫn Sử Dụng Thư Viện Requests Của Python (Phần 2)

Hướng Dẫn Sử Dụng Thư Viện Requests Của Python (Phần 2)

Khi thực hiện một yêu cầu GET, phần lớn các phản hồi từ máy chủ sẽ chứa một thông điệp có thể bao gồm nhiều thông tin quan trọng, gọi là payload. Bạn có thể sử dụng các thuộc tính và phương thức của đối tượng Response để xem payload này dưới nhiều định dạng khác nhau.

Nội Dung Phản Hồi

Để xem nội dung của phản hồi dưới dạng byte, bạn có thể sử dụng .content:

Python
import requests

response = requests.get("https://api.github.com")
print(response.content)

Kết quả trả về là:

PowerShell
b'{"current_user_url":"https://api.github.com/user", ...}'

Với .content, bạn sẽ nhận được dữ liệu thô (byte) của payload. Tuy nhiên, thường bạn sẽ muốn chuyển đổi chúng thành một chuỗi sử dụng một bộ mã hóa ký tự như UTF-8. Để làm điều này, bạn có thể sử dụng .text:

Python
print(response.text)

Kết quả trả về là:

JSON
'{"current_user_url":"https://api.github.com/user", ...}'

.text sẽ tự động giải mã byte thành chuỗi (string). Nếu bạn muốn chỉ định bộ mã hóa cụ thể, có thể thiết lập .encoding trước khi truy cập vào .text:

Python
response.encoding = "utf-8"  # Có thể bỏ qua vì Requests sẽ tự động suy đoán
print(response.text)

Xử Lý Dữ Liệu JSON

Trong trường hợp phản hồi là dữ liệu JSON, bạn có thể sử dụng phương thức .json() để tự động chuyển đổi nó thành một từ điển (dictionary) Python, thay vì phải giải mã thủ công:

Python
response_json = response.json()
print(response_json)

Kết quả sẽ là một từ điển, ví dụ:

JSON
{'current_user_url': 'https://api.github.com/user', ...}

Khi đã có được từ điển, bạn có thể dễ dàng truy cập các giá trị theo khóa (key):

Python
print(response_json["emojis_url"])

Kết quả:

PowerShell
'https://api.github.com/emojis'

Thông Tin Header Của Phản Hồi

Nếu bạn cần thêm thông tin về phản hồi, chẳng hạn như kiểu nội dung của payload hoặc thời gian cache, bạn có thể truy cập phần header của phản hồi bằng thuộc tính .headers:

Python
print(response.headers)

Kết quả trả về sẽ là một từ điển chứa các header:

JSON
{'Server': 'GitHub.com', ... 'X-GitHub-Request-Id': 'AE83:3F40:2151C46:438A840:65C38178'}

Ví dụ, nếu bạn muốn xem kiểu nội dung của phản hồi, bạn có thể truy cập “Content-Type”:

Python
print(response.headers["Content-Type"])

Kết quả:

PowerShell
'application/json; charset=utf-8'

Lưu ý rằng tên các header trong HTTP là không phân biệt chữ hoa chữ thường, vì vậy bạn có thể sử dụng “Content-Type” hoặc “content-type” mà không gặp vấn đề gì.

Thêm Tham Số Vào Yêu Cầu GET

Một trong những cách phổ biến để tùy chỉnh yêu cầu GET là thêm các tham số thông qua chuỗi truy vấn (query string) trong URL. Để làm điều này, bạn truyền một từ điển vào tham số params của phương thức get():

Python
import requests

response = requests.get(
    "https://api.github.com/search/repositories",
    params={"q": "language:python", "sort": "stars", "order": "desc"},
)

json_response = response.json()
popular_repositories = json_response["items"]
for repo in popular_repositories[:3]:
    print(f"Tên: {repo['name']}")
    print(f"Mô tả: {repo['description']}")
    print(f"Số sao: {repo['stargazers_count']}")
    print()

Kết quả là danh sách các kho chứa trên GitHub được sắp xếp theo số sao.

Bạn cũng có thể truyền tham số dưới dạng một danh sách các cặp (key, value):

Python
response = requests.get(
    "https://api.github.com/search/repositories",
    [("q", "language:python"), ("sort", "stars"), ("order", "desc")],
)

Hoặc thậm chí là một chuỗi byte:

Python
response = requests.get(
    "https://api.github.com/search/repositories",
    params=b"q=language:python&sort=stars&order=desc",
)

Thêm Tham Số Header Vào Yêu Cầu

Ngoài việc thêm tham số vào URL, bạn cũng có thể tùy chỉnh các header của yêu cầu bằng cách truyền một từ điển vào tham số headers:

Python
import requests

response = requests.get(
    "https://api.github.com/search/repositories",
    params={"q": '"real python"'},
    headers={"Accept": "application/vnd.github.text-match+json"},
)

json_response = response.json()
first_repository = json_response["items"][0]
print(first_repository["text_matches"][0]["matches"])

Ở ví dụ này, chúng ta thêm header Accept để yêu cầu server trả về kết quả với các từ khóa tìm kiếm được làm nổi bật. Kết quả sẽ là một danh sách các từ khóa tìm thấy trong mô tả kho:

Python
[{'text': 'Real Python', 'indices': [23, 34]}]

Kết Luận

Với các thuộc tính và phương thức của thư viện Requests, bạn có thể dễ dàng làm việc với dữ liệu trả về từ các yêu cầu HTTP. Việc tùy chỉnh yêu cầu GET với tham số query string và các header cũng giúp bạn tương tác linh hoạt hơn với API. Hãy thử áp dụng các kiến thức này vào các dự án của bạn để tối ưu hóa việc thu thập và xử lý dữ liệu từ Internet!

Leave a Reply