Tin tức và phân tích của tất cả các thiết bị di động

Làm cách nào để sử dụng python cURL?

Curl là một tiện ích dòng lệnh được sử dụng làm máy khách HTTP. Nó phổ biến để gửi yêu cầu HTTP từ dòng lệnh. cURL có thể được sử dụng để viết các tập lệnh quét web, kiểm tra tình trạng trang web và tải xuống các tệp từ dòng lệnh.

Nó cực kỳ đơn giản và có thể được sử dụng trong nhiều ngôn ngữ lập trình. Bài viết này giải thích cURL là gì và cách sử dụng nó trong Python.

cURL là gì?

Theo trang web, cURL là viết tắt của “url khách hàng”. Nó là một công cụ dòng lệnh và thư viện để truyền dữ liệu bằng nhiều giao thức mạng lớp ứng dụng khác nhau như HTTP, HTTPS, FTP và IMAP.

Nó cực kỳ phổ biến và được sử dụng trong hơn 10 tỷ lượt cài đặt trên các thiết bị như radio, tivi, bộ định tuyến, máy in và máy tính. cURL hoàn toàn miễn phí và là nguồn mở. Mã nguồn của nó có sẵn trên GitHub.

cURL Các trường hợp sử dụng

cURL rất hữu ích và linh hoạt. Các trường hợp sử dụng phổ biến nhất cho cURL được liệt kê bên dưới. Mặc dù danh sách này không đầy đủ nhưng sau đây chỉ là một số trường hợp phổ biến nhất:

  • Kiểm tra API: Có thể xác minh rằng API đang hoạt động chính xác bằng cách trả về dữ liệu chính xác cho một yêu cầu nhất định. Ngoài ra, nó cũng có thể được sử dụng để kiểm tra tốc độ của API, tức là tốc độ phản hồi của API đối với các yêu cầu. Bạn có thể viết tập lệnh để kiểm tra định kỳ trạng thái của API và gửi thông báo khi có sự cố.
  • Quét web: Nó cũng có thể tự động trích xuất dữ liệu từ các trang web. cURL có thể được sử dụng kết hợp với nhiều ngôn ngữ lập trình và dưới dạng lệnh Bash. Với cURL bạn có thể tự động tìm nạp dữ liệu từ các trang web. Từ HTML phản hồi, bạn có thể phân tích cú pháp và trích xuất dữ liệu bạn cần. Nếu bạn quan tâm đến việc quét web, bạn có thể kiểm tra API quét web newsblog.pl, API này tạo điều kiện thuận lợi cho việc quét dữ liệu.
  • Truy xuất dữ liệu: Với cURL, bạn có thể lưu phản hồi cho các yêu cầu vào một tệp. Những phản hồi này có thể là dữ liệu từ các yêu cầu API hoặc tệp từ máy chủ. Trên thực tế, bằng cách viết phản hồi cho tệp, bạn đã tải xuống tệp. Vì cURL là một công cụ dòng lệnh nên bạn có thể tự động hóa quy trình này để tải xuống nhiều tệp cùng một lúc.

Cách sử dụng cURL trong Python (PycURL)

Đang cài đặt PycURL

Để sử dụng cURL trong Python, chúng tôi sử dụng thư viện PycURL. PycURL là giao diện Python cho thư viện cURL. Nó tạo ra một lớp bao bọc mỏng trên thư viện cURL vốn đã nhanh. Điều này làm cho PycURL nhanh hơn các thư viện khác trong việc thực hiện các yêu cầu như urllib và các yêu cầu. Để sử dụng PycURL bạn cần cài đặt nó trước. Có hướng dẫn chi tiết ở đây, nhưng cách cài đặt dễ dàng nhất là sử dụng pip.

pip install PycURL

Trong Ubuntu 22.04, tôi phải cài đặt thêm các công cụ trước khi cài đặt PycURL. Sử dụng lệnh này trước khi thử cài đặt PycURL bằng pip:

sudo apt install libcurl4-openssl-dev libssl-dev

Thực hiện một yêu cầu GET đơn giản

Để đăng ký, hãy bắt đầu bằng cách tạo tập lệnh Python để lưu mã của bạn. Mở tệp bằng trình soạn thảo văn bản. Tôi sẽ sử dụng Vim, nhưng bạn có thể sử dụng bất kỳ thứ gì. Để mở tệp bằng Vim, hãy sử dụng lệnh dưới đây:

vim pycurl.py

Ở đây pycurl.py là tên của tệp mà tôi sẽ viết mã của mình, nhưng bạn có thể đặt tên cho tệp của mình bất cứ tên nào bạn muốn.

Tiếp theo, chúng tôi nhập lớp cURL từ mô-đun PycURL

from pycurl import Curl

Sau khi nhập PycURL, chúng tôi nhập BytesIO từ io. Chúng tôi sẽ cần điều này để tạo bộ đệm nhằm lưu phản hồi PycURL.

from io import BytesIO

Sau đó, chúng tôi khởi tạo một phiên bản Curl mới.

c = Curl()

Sau đó, chúng tôi tạo một phiên bản BytesIO để tạo bộ đệm mới. PycURL không có cơ chế lưu trữ phản hồi tích hợp. Vì vậy, chúng ta cần tạo một bộ đệm và cho nó biết nơi ghi dữ liệu.

buffer = BytesIO()

Khi bộ đệm được tạo, chúng ta có thể đặt các tùy chọn cho đối tượng khách của mình. Trong trường hợp này, chúng tôi muốn đặt hai tùy chọn; đầu tiên là url chúng tôi đang yêu cầu. Thứ hai là nơi chúng ta muốn viết nội dung của câu trả lời. Đây là mã để làm điều đó:

c.setopt(c.URL, 'http://pycurl.io/')
c.setopt(c.WRITEDATA, buffer)

Khi thực hiện điều đó, chúng ta có thể yêu cầu bằng cách gọi phương thức performance của đối tượng máy khách, sau đó đóng yêu cầu bằng cách gọi close.

c.perform()
c.close()

Để có câu trả lời, chúng ta gọi phương thức getvalue() của đối tượng đệm và giải mã nó. Sau đó chúng ta có thể in nó ra bàn điều khiển.

body = buffer.getvalue()
print(body.decode('iso-8859-1'))

Tệp của bạn sẽ trông như thế này:

from pycurl import Curl
from io import BytesIO

# Create a pycUrl instance
c = Curl()
buffer = BytesIO()

c.setopt(c.URL, 'http://pycurl.io/')
c.setopt(c.WRITEDATA, buffer)

# Make the request
c.perform()

# Close the connection
c.close()

body = buffer.getvalue()
print(body.decode('iso-8859-1'))

Sau khi thực thi tập lệnh, bạn sẽ nhận được kết quả đầu ra sau:

Thực hiện yêu cầu POST

Để thực hiện yêu cầu POST, bạn phải đặt tùy chọn POSTFIELDS của đối tượng máy khách cURL. Ví dụ: đây là một yêu cầu gửi yêu cầu POST tới API giữ chỗ JSON.

from io import BytesIO
from json import dumps
from pycurl import Curl

# Create a pycUrl instance
c = Curl()
buffer = BytesIO()

# Create a data dictionary
data = {
    'userId': 1,
    'title': 'Lorem Ipsum',
    'body': 'Dolor sit amet'
}

# Encode the data to json
encoded_data = dumps(data)

# Set request options
c.setopt(c.URL, 'https://jsonplaceholder.typicode.com/posts')
c.setopt(c.HTTPHEADER, ['Accept: application/json', 'Content-Type: application/json'])
c.setopt(c.POSTFIELDS, encoded_data)
c.setopt(c.WRITEDATA, buffer)

# Make the request
c.perform()

# Close the connection
c.close()

body = buffer.getvalue()
print(body.decode('iso-8859-1'))

Trong đoạn mã trên, tôi đã tạo một đối tượng từ điển với dữ liệu mà tôi sẽ gửi như một phần của yêu cầu. Sau đó, tôi mã hóa dữ liệu sang định dạng JSON và gửi dưới dạng tải trọng tới yêu cầu bằng cách đặt tùy chọn POSTFIELDS thành dữ liệu được mã hóa. Tôi cũng đã chỉ định các tiêu đề để chỉ định loại nội dung yêu cầu và loại dữ liệu phản hồi được chấp nhận. Sau khi chạy mã, bạn sẽ nhận được phản hồi này.

Viết phản hồi vào tập tin

Bạn cũng có thể chuyển bộ đệm tệp tới tùy chọn cURL WRITEDATA. Điều này sẽ lưu dữ liệu phản hồi vào một tập tin. Ví dụ sau đây minh họa khái niệm này:

from pycurl import Curl

file_name="output.json"

# Opening the file in write mode
with open(file_name, 'wb') as f:
    
    # Creating a Curl instance
    c = Curl()

    # Set request options
    c.setopt(c.URL, 'https://jsonplaceholder.typicode.com/users/1')
    c.setopt(c.HTTPHEADER, ['Accept: application/json'])
    c.setopt(c.WRITEDATA, f)

    # Make the request
    c.perform()

    # Close the connection
    c.close()

    print(f'Wrote output to {file_name}')

Các lựa chọn thay thế cho PycURL

PycURL chỉ cung cấp một lớp mỏng trên thư viện cURL. Điều này làm cho nó có khả năng tùy biến cao vì bạn có nhiều quyền kiểm soát hơn đối với các tính năng cấp thấp hơn.

Tuy nhiên, điều này làm cho nó khó sử dụng hơn và do đó hướng tới các nhà phát triển nâng cao hơn. Bạn thường có thể cần một giải pháp thay thế đơn giản hơn cho PycURL. Trong phần này, chúng ta sẽ thảo luận về các lựa chọn thay thế.

# 1. Thư viện khác

Ngoài PycURL, Python còn có các thư viện khác mà bạn có thể sử dụng để thực hiện yêu cầu. Chúng bao gồm thư viện yêu cầu và thư viện urllib. Cả hai đều là những lựa chọn thay thế phổ biến và dễ dàng hơn cho pycURL.

#2. Những ngôn ngữ khác

cURL có giao diện được triển khai bằng các ngôn ngữ khác. Một trang web phổ biến để chuyển đổi các trang cURL là Curl Converter. Với trình chuyển đổi cURL, bạn viết lệnh cURL cho yêu cầu bạn muốn thực hiện và nó sẽ tự động chuyển đổi lệnh của bạn sang bất kỳ ngôn ngữ lập trình nào bạn chọn. Bạn cũng có thể chỉ cần gọi lệnh cURL trực tiếp trong thiết bị đầu cuối của mình hoặc viết tập lệnh Bash.

Ứng dụng

Trong bài viết này, tôi đã giới thiệu cURL và giải thích cách sử dụng nó trong Python bằng mô-đun PycURL. Chúng tôi cũng thảo luận về các lựa chọn thay thế cho PycURL, chẳng hạn như mô-đun yêu cầu và sử dụng các ngôn ngữ khác nhau trong chương trình.

Sau đó kiểm tra việc sử dụng lệnh cURL với các ví dụ thời gian thực.