0
0
Lập trình
NM

Hướng dẫn sử dụng cURL trong PHP: Cheat Sheet chi tiết

Đăng vào 8 tháng trước

• 5 phút đọc

Chủ đề:

#php

Giới thiệu

cURL là một thư viện mạnh mẽ trong PHP cho phép thực hiện các yêu cầu HTTP và FTP một cách dễ dàng và hiệu quả. Mặc dù cURL rất mạnh mẽ, nhưng tài liệu chính thức có thể khó hiểu đối với nhiều lập trình viên. Trong bài viết này, chúng tôi sẽ cung cấp một cheat sheet về cURL trong PHP, bao gồm các ví dụ cụ thể và những thực tiễn tốt nhất để bạn có thể sử dụng cURL hiệu quả hơn.

Mục lục

  1. Tổng quan về cURL
  2. Yêu cầu GET cơ bản
  3. Tái sử dụng con trỏ cURL cho nhiều yêu cầu
  4. Xây dựng và gửi chuỗi truy vấn
  5. Lấy mã HTTP với curl_getinfo
  6. Kết nối đến cổng khác
  7. Xử lý lỗi
  8. Gửi tiêu đề
  9. Nhận tiêu đề
  10. Xác thực cơ bản
  11. Gửi và nhận cookie
  12. Jars cookie
  13. Gửi yêu cầu POST
  14. Gửi JSON qua POST
  15. Gửi dữ liệu form qua POST
  16. Gửi PUT, PATCH và DELETE
  17. Tải xuống tệp
  18. Tải lên tệp
  19. Sử dụng FTP
  20. Thực tiễn tốt nhất
  21. Câu hỏi thường gặp

Tổng quan về cURL

Một kịch bản cURL thường bao gồm bốn giai đoạn cơ bản:

  • Khởi tạo: Tạo handle cURL bằng curl_init().
  • Cài đặt tùy chọn: Sử dụng curl_setopt() để thiết lập tất cả các tùy chọn cho yêu cầu như tiêu đề và dữ liệu body.
  • Thực thi: Chạy yêu cầu cURL với curl_exec() và, nếu cần, lấy dữ liệu phản hồi.
  • Đóng: Đóng handle đã tạo bằng curl_init().

Yêu cầu GET cơ bản

Yêu cầu HTTP GET cơ bản rất đơn giản. Chúng ta khởi tạo cURL bằng curl_init() với URL làm tham số và thiết lập tùy chọn CURLOPT_RETURNTRANSFER là true để nhận được body phản hồi.

php Copy
$url = "http://example.ca/api/bands";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);

Chúng ta cũng có thể chỉ định URL bằng tùy chọn CURLOPT_URL thay vì làm tham số cho curl_init().

php Copy
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);

Tái sử dụng con trỏ cURL cho nhiều yêu cầu

Chúng ta có thể tái sử dụng một handle cURL để thực hiện nhiều yêu cầu bằng cách thay đổi URL với tùy chọn CURLOPT_URL và chạy lại curl_exec(). Dưới đây là ví dụ về cách thực hiện hai yêu cầu GET đến hai URL khác nhau.

php Copy
$url_bands = "http://example.ca/api/bands";
$url_albums = "http://example.ca/api/albums";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Thực hiện yêu cầu đầu tiên
curl_setopt($ch, CURLOPT_URL, $url_bands);
$result_bands = curl_exec($ch);

// Thực hiện yêu cầu thứ hai
curl_setopt($ch, CURLOPT_URL, $url_albums);
$result_albums = curl_exec($ch);
curl_close($ch);

Xây dựng và gửi chuỗi truy vấn

Gửi chuỗi truy vấn rất đơn giản: chỉ cần thêm nó vào URL của yêu cầu.

php Copy
$url = "http://example.ca/api/bands?name=bratmobile";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);

Để xây dựng chuỗi truy vấn từ mảng, chúng ta có thể sử dụng hàm http_build_query.

php Copy
$args = [
    'artist' => 'monk, thelonious',
    'years' => [1957, 1963],
];
$query_string = http_build_query($args);
$url = "http://example.ca/api/bands?" . $query_string;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);

Lấy mã HTTP với curl_getinfo

Mã phản hồi HTTP có thể được lấy từ handle cURL bằng curl_getinfo() như sau:

php Copy
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

Kết nối đến cổng khác

Cổng có thể được thiết lập với tùy chọn CURLOPT_PORT.

php Copy
curl_setopt($ch, CURLOPT_PORT, 8080);

Xử lý lỗi

cURL có thể gặp lỗi; nên kiểm tra và xử lý chúng là rất quan trọng.

php Copy
if(curl_errno($ch)) {
    $error_message = curl_error($ch);
    // xử lý lỗi
}

Xử lý lỗi HTTP

Mặc định, các lỗi HTTP không được coi là lỗi cURL. Chúng ta có thể thay đổi điều này bằng cách thiết lập CURLOPT_FAILONERROR thành true.

php Copy
curl_setopt($ch, CURLOPT_FAILONERROR, true);

Gửi tiêu đề

Tiêu đề có thể được thiết lập với tùy chọn CURLOPT_HTTPHEADER.

php Copy
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'X-My-Special-Header: foo',
]);

Nhận tiêu đề

Chúng ta có thể nhận tiêu đề phản hồi bằng cách sử dụng CURLINFO_HEADER_SIZE để trích xuất chúng từ phản hồi.

php Copy
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headersString = substr($result, 0, $headerSize);

Xác thực cơ bản

Để thực hiện yêu cầu đến các trang web được bảo vệ bằng xác thực cơ bản, sử dụng CURLOPT_HTTPAUTHCURLOPT_USERPWD.

php Copy
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "<username>:<password>");

Chúng ta có thể gửi cookie dưới dạng chuỗi hoặc bằng tiêu đề.

php Copy
curl_setopt($ch, CURLOPT_COOKIE, "favourite_year=1993;preferred_format=EP");

Để lưu trữ cookie giữa các yêu cầu, chúng ta có thể sử dụng tính năng cookie jar.

php Copy
curl_setopt($ch, CURLOPT_COOKIEJAR, "/path/to/cookiejar");

Gửi yêu cầu POST

Chúng ta có thể thiết lập phương thức HTTP là POST bằng cách sử dụng CURLOPT_POST hoặc CURLOPT_CUSTOMREQUEST.

php Copy
curl_setopt($ch, CURLOPT_POST, true);

Gửi JSON qua POST

Gửi dữ liệu JSON qua POST bằng cách thiết lập CURLOPT_POSTFIELDS và tiêu đề Content-Type: application/json.

php Copy
$data = ['name' => 'bratmobile'];
$json = json_encode($data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);

Gửi dữ liệu form qua POST

Dữ liệu form có thể được gửi với CURLOPT_POSTFIELDS.

php Copy
$args = ['artist' => 'monk, thelonious', 'years' => [1957, 1963]];
$postFields = http_build_query($args);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);

Gửi PUT, PATCH và DELETE

Các phương thức PUT, PATCH và DELETE có thể được gửi bằng CURLOPT_CUSTOMREQUEST.

php Copy
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');

Tải xuống tệp

Để tải xuống tệp, chúng ta cần sử dụng con trỏ tệp được tạo bởi fopen().

php Copy
$outputFp = fopen("/path/to/image.jpg", "wb");
curl_setopt($ch, CURLOPT_FILE, $outputFp);

Tải lên tệp

Để tải lên tệp, tạo đối tượng CURLFile và gán nó cho CURLOPT_POSTFIELDS.

php Copy
$curlFile = new CURLFile($path, $mime, $postname);
curl_setopt($ch, CURLOPT_POSTFIELDS, [$curlFile->postname => $curlFile]);

Sử dụng FTP

PHP cung cấp một bộ lệnh FTP hữu ích mà bạn có thể xem xét sử dụng thay cho cURL.

php Copy
$url = "ftp://ftp.example.ca";
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

Thực tiễn tốt nhất

  • Luôn kiểm tra lỗi sau mỗi yêu cầu cURL.
  • Sử dụng cookie jar để quản lý cookie giữa các yêu cầu.
  • Sử dụng CURLOPT_VERBOSE để gỡ lỗi.

Câu hỏi thường gặp

cURL có an toàn không?

cURL là an toàn nếu được sử dụng đúng cách, hãy đảm bảo sử dụng HTTPS khi gửi thông tin nhạy cảm.

Tôi có thể sử dụng cURL để tải lên tệp không?

Có, bạn có thể sử dụng cURL để tải lên tệp bằng cách tạo đối tượng CURLFile và gửi nó qua POST.

Kết luận

Hy vọng cheat sheet này sẽ giúp bạn sử dụng cURL trong PHP một cách hiệu quả hơn. Đừng ngần ngại thử nghiệm và áp dụng các ví dụ trên vào dự án của bạn. Nếu bạn có thắc mắc hoặc cần thêm thông tin, hãy để lại câu hỏi trong phần bình luận bên dưới!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào