CodeGym /Các khóa học /Python SELF VI /Sử dụng mạng trong thực tế

Sử dụng mạng trong thực tế

Python SELF VI
Mức độ , Bài học
Có sẵn

4.1 Xử lý phản hồi

Module requests cung cấp các phương thức tiện lợi để làm việc với phản hồi từ server.

Mã trạng thái

Ngoài phản hồi, server còn gửi mã trạng thái của yêu cầu. Thông tin về trạng thái được chứa trong các trường status_codereason. Ví dụ dưới đây:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # Hiển thị mã trạng thái của phản hồi
print(response.reason)  # Hiển thị mô tả văn bản của trạng thái
print(response.ok)  # Trả về True nếu mã trạng thái nhỏ hơn 400
        

Headers

Vâng, tất nhiên không có HTTP request nào mà không có headers đúng không? Nếu bạn cần headers của request hay response, bạn có thể truy cập chúng qua trường headers:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)  # Hiển thị headers của phản hồi
print(response.headers['Content-Type'])  # Hiển thị giá trị của một header cụ thể
            

Nội dung phản hồi

Phản hồi từ server có thể chứa byte, text, json hoặc xml. Nếu bạn biết chính xác mình đang yêu cầu từ server, bạn có thể ngay lập tức nhận đối tượng loại cần thiết bằng cách sử dụng một trong các phương thức/trường:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # Hiển thị nội dung phản hồi dưới dạng text
print(response.json())  # Hiển thị nội dung phản hồi dưới dạng JSON
print(response.content)  # Hiển thị nội dung phản hồi dưới dạng bytes
        

Bạn sẽ tìm hiểu chi tiết hơn về headers (headers) và mã trạng thái phản hồi trong các bài giảng về cấu trúc mạng.

4.2 Xử lý lỗi

Module requests cung cấp ngoại lệ cho việc xử lý lỗi.

Tiêu chuẩn HTTP không bao hàm ngoại lệ, thay vào đó nó hoạt động với mã lỗi (status_code). Nếu bạn muốn, kết quả của một request thất bại sẽ sinh ra ngoại lệ Python, bạn cần explicitly gọi hàm raise_for_status().

Ví dụ:


import requests

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # Sinh ngoại lệ cho mã trạng thái 4xx và 5xx
except requests.exceptions.HTTPError as err:
    print(f"HTTP error occurred: {err}")
except Exception as err:
    print(f"Other error occurred: {err}")
else:
    print("Success!")
        

Bạn có thể tìm hiểu chi tiết hơn về mã lỗi trong các bài giảng về cấu trúc mạng.

4.3 Gửi dữ liệu

Trước khi JSON xuất hiện, khối lượng dữ liệu lớn được gửi đi thông qua «form». Form – là một đối tượng đặc biệt trên trang trình duyệt (và chuẩn dữ liệu trong HTTP). Nếu bạn muốn gửi dữ liệu «thông qua form», bạn chỉ cần gửi kèm theo request tham số data.

Lưu ý! GET requests không hỗ trợ form vì không chứa nội dung request. Tất cả dữ liệu của chúng được gửi chỉ trong URL.

Gửi dữ liệu trong GET request

Trong GET request dữ liệu được gửi qua tham số URL. Đây là ví dụ:


import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # Hiển thị URL với các tham số thêm vào
    

Gửi dữ liệu form

Chúng ta sẽ sử dụng POST request, để gửi dữ liệu tới server.

Ví dụ:


import requests

data = {
    'username': 'example',
    'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
        

Gửi files

Nếu bạn muốn gửi dữ liệu nhị phân lên mạng, chẳng hạn như tải lên một bức ảnh, thì bạn cần gửi file của mình hoặc các file trong request bằng cách sử dụng tham số files.

Ví dụ:


import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

Dễ như ăn cháo. Nếu muốn gửi nhiều file, hãy liệt kê chúng dưới bất kỳ tên nào trong biến files.

Lưu ý! Đừng quên đóng file sau khi gửi, để tránh rò rỉ tài nguyên. Tốt nhất là hãy sử dụng cấu trúc with, để tự động đóng file sau khi hoàn thành thao tác:


import requests

with open('example.txt', 'rb') as f:
    files = {'file': f}
    response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

4.4 Đăng nhập và xác thực

API (Application Programming Interface) – là tập hợp các quy tắc và các giao thức, cho phép các chương trình khác nhau tương tác với nhau. Rất nhiều trang web và dịch vụ cho phép gửi request và làm việc với API của chúng chỉ sau khi đăng nhập.

Sau khi đăng nhập thành công bạn nhận được một đối tượng đặc biệt – session (session), chứa số duy nhất của «phiên làm việc được xác thực với server». Đối với các request tiếp theo, bạn cần sử dụng đối tượng này.

Xác thực

Để đăng nhập vào server, bạn cần thông qua xác thực (quá trình đăng nhập), cho điều này bạn cần gửi với request thông tin đăng nhập.


import requests
from requests.auth import HTTPBasicAuth
        
response = requests.get('https://httpbin.org/basic-auth/user/pass', \ 
                        auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code)
        
    

Đây là cách quá trình xác thực diễn ra, nhưng thông thường nó được sử dụng cùng với session.

Sử dụng sessions

Sessions cho phép lưu các tham số giữa các request, như cookies hoặc thông tin xác thực người dùng.


import requests

payload = {
    'username': 'your_username',
    'password': 'your_password'
}
            
# Tạo session
session = requests.Session()
            
# Đăng nhập vào trang
login_response = session.post('https://example.com/login', data = payload)
            
# Tiếp tục làm việc với phiên người dùng đã đăng nhập
data_response = session.get('https://example.com/api/data')
print(data_response.json())
        
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION