I.Giới thiệu:

  • cURL là 1 thư viện được sử dụng để truyền dữ liệu thông quá nhiều giao thức mạng khác nhau.
  • CURL hỗ trợ các giao thức như cookies, FTP, FTPS, cookie, FTP, FTPS, HTTP GET, HTTP POST, SMTP...
  • Postman là 1 công cụ dùng để thử nghiệm API hỗ trợ đầy đủ các phương thức GET, POST, PUT, PATCH, DELETE... Bên cạnh đó Postman còn có khả năng tạo code cUrl với nhiều ngôn ngữ lập trình.

II. Cách đăng nhập và lấy dữ liệu từ một trang web khác bằng php

  • Sẽ có những trường hợp mà app của bạn cần phải đăng nhập vào một trang web và lấy dữ liệu sau khi đăng nhập. Ở đây mình sử dụng trang báo tuổi trẻ để làm mẫu.

  • Đầu tiên chúng ta sẽ vào trang báo tuổi trẻ để đăng nhập như bình thường, tuy nhiên các bạn nhớ mở dev tool (mình dùng chrome) để có thể xem param post đăng nhập.

1_KpO4Dj68R4bidHCyPessXgLGSQGkBiw

  • Sau khi đăng nhập xong thì dưới dev tool sẽ xuất hiện thông tin POST
    1fp04cIAZibEDedANgXY2NTz-UyLTbUBP

  • Click vào network đăng nhập chọn copy và copy as cUrl như hình dưới
    1nZ8bhD_lB4kaxLPrzlHsr_Jnxc_Bm6Xo

  • Mở postman nhấn Ctrl + o chọn Raw text copy vào nhấn import như hình dưới
    1DMaUgwOWH46UE4o1EJtlkLWeNaNxPfpd

  • Postman sẽ generate ra code php -cUrl.
    131ko9kMXRBrANMo-PN-k2J9MmHynCKye

  • Copy code này vào php và chạy
    1nHFDmrOlmSPbrHowzJbaEomOxTWVEa-4

  • Tất nhiên bạn sẽ nhận được dòng trạng thái đó là bạn đã đăng nhập thành công tuy nhiên đấy không phải là mục tiêu chính của bài viết này, mục tiêu chính của bài viết này là hướng dẫn cách lấy những liệu cần thiết chứ không phải chỉ đăng nhập là xong và postman sẽ không tạo cho bạn cái code này nên cũng đừng quá phụ thuộc vào postman mà phải biết kết hợp nhiều kiến thức của backend(php, ASP...), frontend (HTML, CSS, JS) ... và cả postman nữa để đạt được mục tiêu...

  • Để vào những trang khác sau đăng nhập chúng ta cần cookie đăng nhập và postman không tạo ra code này cho nên mình sẽ thêm code này vào và mình sẽ lấy thông tin từ trang tin đã lưu của user.

1c-Ki5xqOPtc1JJuvofYHhqoK2iRttgYM

  • Chúng ta sẽ lấy danh sách những tin đã lưu bằng đoạn code dưới sau đây. Các bạn cần lưu ý kỹ chỗ file save cookie, thông tin cookie cần phải được lưu vào file tạm và sẽ được dùng để vào các trang cần xác thực.
<?php
  // file save cookie of curl
  $curlCookiefile = tempnam("/tmp", "CURLCOOKIE");
  $curl = curl_init();

  curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://id.tuoitre.vn/api/login.api',
    CURLOPT_COOKIEJAR => $curlCookiefile,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS =>'email=email&pass',
    CURLOPT_HTTPHEADER => array(
      'Accept: application/json, text/javascript, */*; q=0.01',
      'Accept-Language: en-US,en;q=0.9,vi;q=0.8,ja;q=0.7',
      'Connection: keep-alive',
      'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
      'Origin: https://tuoitre.vn',
      'Referer: https://tuoitre.vn/',
      'Sec-Fetch-Dest: empty',
      'Sec-Fetch-Mode: cors',
      'Sec-Fetch-Site: same-site',
      'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
      'sec-ch-ua: "Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"',
      'sec-ch-ua-mobile: ?0',
      'sec-ch-ua-platform: "macOS"'
    ),
  ));

  $loginResponse = curl_exec($curl);
  echo 'Thông tin đăng nhập:<br>';
  echo '<pre>' . var_export(json_decode($loginResponse, true), true) . '</pre>';

  curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://id.tuoitre.vn/handlers/user/getlistsaved.ashx',
    CURLOPT_COOKIEFILE =>$curlCookiefile,
  ));

  $saveListResponse = curl_exec($curl);

  curl_close($curl);
  echo 'Bài báo đã lưu:<br>';
  echo '<pre>' . var_export(json_decode($saveListResponse, true), true) . '</pre>';
?>

  • Kết quả:

1jZJD9yJnu19dToTuLWtO3jBaso9zKg-R

III.Tổng kết:

  • Việc sử dụng cUrl mang lại rất nhiều lợi ích nhất là trong việc tự động hoá, ví dụ như mỗi ngày bạn cần phải đăng nhập vào 1 trang web và điểm danh để có tiền ảo chẳng hạn thì bạn có thể dùng cUrl để đăng nhập và điểm danh, sau đó dùng CronJob để tự động gọi hàm mỗi ngày, và có thể đăng nhập được nhiều tài khoản 1 cách rất nhanh chóng và tiết kiệm rất nhiều sức lao động.