Trong phần này, chúng ta sẽ tìm hiểu về các phương thức HTTP khác ngoài phương thức GET, bao gồm POST, PUT, DELETE, HEAD, PATCH và OPTIONS. Mỗi phương thức HTTP đều có một hàm tương ứng trong thư viện Requests, với cú pháp tương tự như get()
.
Lưu ý: Để thử nghiệm các phương thức HTTP này, bạn có thể gửi các yêu cầu đến httpbin.org. Đây là một dịch vụ tuyệt vời được tạo ra bởi Kenneth Reitz, tác giả của thư viện Requests, dùng để nhận các yêu cầu thử nghiệm và trả về dữ liệu về các yêu cầu đó.
1. Các Phương Thức HTTP trong Requests
Thư viện Requests cung cấp một giao diện rất dễ sử dụng cho các phương thức HTTP. Ví dụ:
import requests
# Gửi yêu cầu GET
response = requests.get("https://httpbin.org/get")
print(response.status_code) # Output: 200
# Gửi yêu cầu POST với dữ liệu
response = requests.post("https://httpbin.org/post", data={"key": "value"})
print(response.status_code) # Output: 200
# Gửi yêu cầu PUT
response = requests.put("https://httpbin.org/put", data={"key": "value"})
print(response.status_code) # Output: 200
# Gửi yêu cầu DELETE
response = requests.delete("https://httpbin.org/delete")
print(response.status_code) # Output: 200
# Gửi yêu cầu HEAD
response = requests.head("https://httpbin.org/get")
print(response.status_code) # Output: 200
# Gửi yêu cầu PATCH
response = requests.patch("https://httpbin.org/patch", data={"key": "value"})
print(response.status_code) # Output: 200
# Gửi yêu cầu OPTIONS
response = requests.options("https://httpbin.org/get")
print(response.status_code) # Output: 200
Bạn có thể nhận thấy rằng các phương thức này đều trả về mã trạng thái 200
, cho biết yêu cầu thành công.
2. Phương Thức requests.request()
Các hàm trên thực chất là những hàm tiện ích cao cấp của requests.request()
, nơi bạn chỉ cần chỉ định tên phương thức HTTP:
response = requests.request("GET", "https://httpbin.org/get")
print(response.status_code) # Output: 200
Mặc dù bạn có thể sử dụng requests.request()
trực tiếp, nhưng việc sử dụng các hàm tiện ích cao cấp sẽ dễ hiểu và tiện lợi hơn nhiều.
3. Kiểm Tra Phản Hồi
Khi bạn gửi một yêu cầu, bạn có thể kiểm tra các thông tin phản hồi như tiêu đề, dữ liệu và mã trạng thái:
response = requests.head("https://httpbin.org/get")
print(response.headers["Content-Type"]) # Output: 'application/json'
response = requests.delete("https://httpbin.org/delete")
json_response = response.json()
print(json_response["args"]) # Output: {}
4. Dữ Liệu Trong Thân Yêu Cầu
Theo chuẩn HTTP, các yêu cầu POST, PUT và PATCH gửi dữ liệu thông qua thân yêu cầu thay vì thông qua tham số chuỗi truy vấn. Trong Requests, bạn có thể truyền dữ liệu vào tham số data
hoặc json
:
- Gửi dữ liệu dạng form (x-www-form-urlencoded) sử dụng
data
:
response = requests.post("https://httpbin.org/post", data={"key": "value"})
print(response.status_code) # Output: 200
Gửi dữ liệu dưới dạng danh sách các cặp tuple:
response = requests.post("https://httpbin.org/post", data=[("key", "value")])
print(response.status_code) # Output: 200
Gửi dữ liệu JSON với json
:
response = requests.post("https://httpbin.org/post", json={"key": "value"})
json_response = response.json()
print(json_response["data"]) # Output: '{"key": "value"}'
print(json_response["headers"]["Content-Type"]) # Output: 'application/json'
5. Kiểm Tra Cấu Trúc Yêu Cầu
Bạn có thể kiểm tra yêu cầu đã được chuẩn bị trước khi gửi đi thông qua đối tượng PreparedRequest
:
response = requests.post("https://httpbin.org/post", json={"key": "value"})
print(response.request.headers["Content-Type"]) # Output: 'application/json'
print(response.request.url) # Output: 'https://httpbin.org/post'
print(response.request.body) # Output: b'{"key": "value"}'
6. Xác Thực (Authentication)
Khi làm việc với các API yêu cầu xác thực, bạn có thể truyền thông tin đăng nhập qua tham số auth
. Thư viện Requests hỗ trợ nhiều cách xác thực, bao gồm Basic authentication và Bearer tokens.
Ví dụ về xác thực Basic:
response = requests.get(
"https://httpbin.org/basic-auth/user/passwd",
auth=("user", "passwd")
)
print(response.status_code) # Output: 200
print(response.request.headers["Authorization"]) # Output: 'Basic dXNlcjpwYXNzd2Q='
7. Xác Thực Với Bearer Token
Khi làm việc với API yêu cầu token (chẳng hạn như GitHub API), bạn có thể sử dụng một phương thức tùy chỉnh để gửi token vào header Authorization:
from requests.auth import AuthBase
class TokenAuth(AuthBase):
"""Thực thi cơ chế xác thực bằng token."""
def __init__(self, token):
self.token = token
def __call__(self, request):
"""Gắn token vào header Authorization."""
request.headers["Authorization"] = f"Bearer {self.token}"
return request
# Sử dụng TokenAuth để xác thực
token = "<YOUR_GITHUB_TOKEN>"
response = requests.get(
"https://api.github.com/user",
auth=TokenAuth(token)
)
print(response.status_code) # Output: 200
print(response.request.headers["Authorization"]) # Output: 'Bearer ghp_b...'
Với phương pháp này, bạn có thể dễ dàng quản lý các API yêu cầu xác thực qua Bearer token.
Kết Luận
Thư viện Requests trong Python cung cấp một giao diện dễ sử dụng để làm việc với các phương thức HTTP phổ biến như GET, POST, PUT, DELETE, HEAD, PATCH, và OPTIONS. Thêm vào đó, việc xử lý xác thực và kiểm tra phản hồi giúp bạn tương tác hiệu quả với các API trong các ứng dụng thực tế. Hãy nhớ sử dụng các cơ chế xác thực chuẩn để bảo vệ thông tin và bảo mật hệ thống khi tương tác với các dịch vụ yêu cầu xác thực.