Hướng dẫn how to get json response from rest api in php using curl - cách nhận phản hồi json từ api còn lại trong php bằng cách sử dụng curl

Tôi có một API REST mà tôi có thể truy cập bằng URL này: "http://127.0.0.1:8000/api/thesis/?format=json". Bây giờ tôi muốn lấy dữ liệu JSON từ nó. Để kết nối với API, tôi đã cố gắng sử dụng PHP-Curl như dưới đây. Nhưng tôi nhận được NULL! (Đây là lần đầu tiên tôi làm PHP, bất kỳ trợ giúp nào cũng sẽ rất tuyệt!)


Hướng dẫn how to get json response from rest api in php using curl - cách nhận phản hồi json từ api còn lại trong php bằng cách sử dụng curl

Hỏi ngày 24 tháng 8 năm 2015 lúc 9:52Aug 24, 2015 at 9:52

3

Tôi nghĩ bạn nên sử dụng phương pháp

$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
1 của
$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
2 như thế này

$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);

Đã trả lời ngày 24 tháng 8 năm 2015 lúc 10:01Aug 24, 2015 at 10:01

Hướng dẫn how to get json response from rest api in php using curl - cách nhận phản hồi json từ api còn lại trong php bằng cách sử dụng curl

Sunil Pachlangiasunil pachlangiaSunil Pachlangia

2.0132 Huy hiệu vàng14 Huy hiệu bạc25 Huy hiệu Đồng2 gold badges14 silver badges25 bronze badges

1

Sử dụng đoạn mã được đề cập dưới đây để tìm nạp dữ liệu từ API REST bằng cách sử dụng Php CurlPHP curl

 

Đã trả lời ngày 24 tháng 8 năm 2015 lúc 11:41Aug 24, 2015 at 11:41

Hướng dẫn how to get json response from rest api in php using curl - cách nhận phản hồi json từ api còn lại trong php bằng cách sử dụng curl

Nagama Inamdarnagama InamdarNagama Inamdar

2.83122 Huy hiệu vàng39 Huy hiệu bạc47 Huy hiệu đồng22 gold badges39 silver badges47 bronze badges

Gần đây tôi đã làm việc trong một dự án mà tôi cần tích hợp API bên ngoài bằng cách sử dụng các yêu cầu HTTP Curl. Đó là lần đầu tiên tôi làm điều này và tôi đã gặp rất nhiều vấn đề khi tìm ra điều này. Tôi đã viết bài đăng này để tôi có thể nhớ các cuộc gọi API Curl của tôi cho lần sau và có lẽ nó cũng có thể giúp bạn. & NBSP;

Các cuộc gọi và chức năng API mà tôi sử dụng trong bài đăng này đều là các ví dụ hoạt động trên PHP -V 5.6.

Hướng dẫn how to get json response from rest api in php using curl - cách nhận phản hồi json từ api còn lại trong php bằng cách sử dụng curl

Php Curl Basics

Curl là viết tắt của thư viện URL URL và nó cho phép bạn kết nối và giao tiếp với các loại máy chủ khác nhau với nhiều loại giao thức khác nhau (HTTP, HTTPS, FTP, Proxy, Cookies, Muff). Thông tin thêm về cách Curl thực sự hoạt động có thể được tìm thấy trong tài liệu PHP chính thức. Bài viết này sẽ cung cấp nhiều ví dụ chuyên sâu hơn để tích hợp các ứng dụng của bạn.

Tôi đã nhận được rất nhiều câu trả lời về ‘Làm thế nào để Curl thực sự hoạt động và tôi có cảm giác rằng mọi người không biết những gì diễn ra trong một cuộc gọi Curl. Trước khi chúng tôi bắt đầu với bài viết và thiết lập Curl của chúng tôi, tôi đã thêm một ví dụ đơn giản về một yêu cầu Curl đơn giản. Yêu cầu sẽ trả về phản hồi API dưới dạng chuỗi.

// create & initialize a curl session
$curl = curl_init();

// set our url with curl_setopt()
curl_setopt($curl, CURLOPT_URL, "api.example.com");

// return the transfer as a string, also with setopt()
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// curl_exec() executes the started curl session
// $output contains the output string
$output = curl_exec($curl);

// close curl resource to free up system resources
// (deletes the variable made by curl_init)
curl_close($curl);

Lưu ý rằng chúng tôi đã lưu trữ curl_exec () của chúng tôi trong một đầu ra $ biến. Biến sản lượng $ này vẫn có sẵn trong chương trình của chúng tôi ngay cả sau khi chúng tôi đóng nó bằng curl_close (). Vì vậy, sau khi chúng tôi thực hiện cuộc gọi của chúng tôi và đóng kết nối, chúng tôi vẫn có thể truy cập kết quả bằng cách sử dụng biến đầu ra $ của chúng tôi.

Bây giờ chúng tôi đã hiểu những điều cơ bản, hãy để cố gắng đưa nó vào một chức năng mà chúng tôi có thể sử dụng lại trong ứng dụng của mình.

Thiết lập Curl PHP

Việc triển khai API bên ngoài vào dự án của bạn có thể sẽ mất nhiều hơn một cuộc gọi API và từ các trang khác nhau trong dự án của bạn. Đây là lý do tại sao tôi đã tạo ra một tập lệnh PHP đơn giản cho phép chúng tôi gọi hàm này, với một tập hợp các tham số và yêu cầu Curl sẽ được thực hiện.

Đảm bảo đặt mã này vào một tệp hoặc địa điểm có thể được truy cập bởi toàn bộ ứng dụng hoặc trang web của bạn. (Tôi đã cập nhật chức năng này để chúng tôi có thể xác định các tiêu đề khi chúng tôi thực hiện cuộc gọi. Tôi đã thêm một phần cho các tiêu đề tùy chỉnh ở phía dưới!)

function callAPI($method, $url, $data){
   $curl = curl_init();
   switch ($method){
      case "POST":
         curl_setopt($curl, CURLOPT_POST, 1);
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
         break;
      case "PUT":
         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);			 					
         break;
      default:
         if ($data)
            $url = sprintf("%s?%s", $url, http_build_query($data));
   }
   // OPTIONS:
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_HTTPHEADER, array(
      'APIKEY: 111111111111111111111',
      'Content-Type: application/json',
   ));
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
   // EXECUTE:
   $result = curl_exec($curl);
   if(!$result){die("Connection Failure");}
   curl_close($curl);
   return $result;
}

Đây là một thiết lập cơ bản để thực hiện một cuộc gọi Curl và tôi sử dụng câu lệnh

$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
3 để kiểm tra xem cuộc gọi API có phải là một bài đăng hay không, hoặc một cái gì đó khác (nhận hoặc xóa). Tôi sẽ đi sâu hơn vào trường hợp chuyển đổi trong khi chúng tôi thực hiện các yêu cầu cụ thể.

Tôi đã sử dụng

$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
4 bên trong
$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
5 để xem liệu chúng tôi có muốn cung cấp dữ liệu JSON vào cuộc gọi của chúng tôi hay không. Đối với bài đăng và đặt yêu cầu, việc tuyên bố IF là không thực sự cần thiết bởi vì chúng tôi chỉ sử dụng bài đăng hoặc đặt với dữ liệu, nhưng nó có một bảo mật bổ sung để đảm bảo chức năng cuộc gọi của chúng tôi sẽ bị phá vỡ.

PHP Curl nhận được yêu cầu

Cuộc gọi API đơn giản nhất là cuộc gọi nhận, vì vậy hãy để bắt đầu với điều đó! Hàm Callapi của chúng tôi mong đợi 3 tham số: $ Phương thức, $ URL và $ Dữ liệu. Chúng tôi cần cung cấp các tham số đó cho tất cả các cuộc gọi API của chúng tôi, vì vậy để nhận được Curl, chúng tôi chỉ có thể đặt $ dữ liệu về sai vì chúng tôi không truyền bất kỳ dữ liệu nào với cuộc gọi nhận.

$get_data = callAPI('GET', 'https://api.example.com/get_url/'.$user['User']['customer_id'], false);
$response = json_decode($get_data, true);
$errors = $response['response']['errors'];
$data = $response['response']['data'][0];

$ get_data đã trả về tất cả dữ liệu chúng tôi muốn từ API trong chuỗi JSON. Tôi đã sử dụng $ phản hồi để chuyển đổi chuỗi JSON trở lại thành mảng PHP có thể sử dụng. Bạn có thể bỏ qua các bước đó nếu bạn muốn, đây là sở thích cá nhân của tôi. Tôi cũng sử dụng thêm $ lỗi và mảng dữ liệu $ để lưu trữ dữ liệu và lỗi thực tế.

Yêu cầu bài viết Curl PHP

Rõ ràng, một yêu cầu bài viết không yêu cầu dữ liệu. Hãy chắc chắn rằng dữ liệu JSON của bạn là chính xác, nếu không, yêu cầu sẽ tiếp tục trả về lỗi. Mặc dù thì nếu chúng tôi nhận được lỗi từ API, điều đó có nghĩa là các cuộc gọi của chúng tôi đang hoạt động

Trong ví dụ của tôi, tôi đã sử dụng cú pháp CakePHP để thiết lập mảng JSON của tôi, vì vậy hãy nhớ rằng.

$data_array =  array(
      "customer"        => $user['User']['customer_id'],
      "payment"         => array(
            "number"         => $this->request->data['account'],
            "routing"        => $this->request->data['routing'],
            "method"         => $this->request->data['method']
      ),
);
$make_call = callAPI('POST', 'https://api.example.com/post_url/', json_encode($data_array));
$response = json_decode($make_call, true);
$errors   = $response['response']['errors'];
$data     = $response['response']['data'][0];

Bởi vì chúng tôi thực hiện một cuộc gọi API với dữ liệu JSON, nên tôi đã chuyển đổi mảng PHP của mình thành chuỗi JSON với

$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
6. Phản hồi sẽ xuất hiện dưới dạng chuỗi JSON một lần nữa, vì vậy tôi đã sử dụng
$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
7 để chuyển đổi chuỗi JSON trở lại một mảng PHP có thể sử dụng. Giống như chúng tôi đã làm trong cuộc gọi của chúng tôi, vì vậy bạn có thể bỏ qua các bước này một lần nữa nếu bạn không cần chúng.

Php Curl đặt yêu cầu

Yêu cầu đặt gần như giống như yêu cầu POST. Tôi đã có một thời gian khó khăn để tìm ra cách truyền dữ liệu vào một cuộc gọi đặt. Nếu chúng ta xem hàm callapi () của chúng ta, bạn sẽ thấy rằng tôi đã thay đổi một số điều giữa yêu cầu đặt và bài đăng. Chúng ta vẫn có thể sử dụng các tham số tương tự trong hàm callapi () của chúng ta như mọi khi.

$data_array =  array(
   "amount" => (string)($lease['amount'] / $tenant_count)
);
$update_plan = callAPI('PUT', 'https://api.example.com/put_url/'.$lease['plan_id'], json_encode($data_array));
$response = json_decode($update_plan, true);
$errors = $response['response']['errors'];
$data = $response['response']['data'][0];

Yêu cầu xóa Curl PHP

Yêu cầu xóa lại rất đơn giản. Chúng tôi chỉ có thể nhấn URL API với $ id mà chúng tôi muốn xóa và phân biệt nó, nó đã biến mất mãi mãi.

callAPI('DELETE', 'https://api.example.com/delete_url/' . $id, false);

Ban đầu, chúng tôi đã xác định chức năng Callapi của chúng tôi với các tiêu đề đặt trước. Nhưng nếu chúng ta, vì một số lý do, cần phải thay đổi tiêu đề một chút cho một cuộc gọi khác? Chúng tôi không muốn viết một chức năng Callapi hoàn toàn mới chỉ để chỉnh sửa một số tiêu đề. Do đó, ở đây, một tùy chọn về cách làm cho các tiêu đề đặt trước linh hoạt:

function callAPI($method, $url, $data, $headers = false){
   $curl = curl_init();
   switch ($method){
      ...
   }
   // OPTIONS:
   curl_setopt($curl, CURLOPT_URL, $url);
   if(!$headers){
       curl_setopt($curl, CURLOPT_HTTPHEADER, array(
          'APIKEY: 111111111111111111111',
          'Content-Type: application/json',
       ));
   }else{
       curl_setopt($curl, CURLOPT_HTTPHEADER, array(
          'APIKEY: 111111111111111111111',
          'Content-Type: application/json',
          $headers
       ));
   }
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
   // EXECUTE:
   ...
}

Có 2 sự khác biệt ở đây từ chức năng đầu tiên của chúng tôi. 1: Chúng tôi đã thêm một tham số bổ sung trong chức năng của chúng tôi để xác định xem chúng tôi có muốn sử dụng tiêu đề tùy chỉnh hay không. Tôi đặt nó vào

$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
8 để cung cấp cho nó một giá trị mặc định. Bây giờ chúng tôi không bắt buộc phải nhập tiêu đề của chúng tôi với mỗi cuộc gọi.

Thay đổi thứ hai là sự kiện nếu chúng tôi đặt các tiêu đề API. Nếu chúng tôi không đưa ra bất kỳ tiêu đề nào khi chúng tôi thực hiện cuộc gọi, thì nó sẽ sử dụng các tiêu đề mặc định của chúng tôi thay vì bị sập. Bây giờ chúng tôi đã sẵn sàng để thêm các tiêu đề tùy chỉnh với cuộc gọi của chúng tôi!

Trong ví dụ này, tôi đã sử dụng các tham số tìm kiếm để tìm kiếm dữ liệu cụ thể trước khi tôi lấy tất cả dữ liệu với API. Để thực hiện tìm kiếm, rõ ràng tôi cần có thể thêm truy vấn tìm kiếm của mình vào các tiêu đề Callapi của tôi. Đây là ví dụ của tôi:

$service_url = "http://127.0.0.1:8000/api/thesis/?format=json";
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
//execute the session
$curl_response = curl_exec($curl);
//finish off the session
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
0

Đây chỉ là một ví dụ về cách thêm tiêu đề. Ví dụ của tôi là có được tất cả các hàng nơi một khoản tiền thuê được trả trong 30 ngày qua. $ one_month_ago chỉ là một biến trợ giúp. $ Rent_header là tiêu đề thực tế mà tôi muốn thêm vào các tiêu đề mặc định của mình. Điều này cần phải là một chuỗi !!

Khi bạn đặt tiêu đề, bạn có thể thực hiện một cuộc gọi API thông thường và thêm tiêu đề mới của bạn ở cuối.

Tôi đã không cần sử dụng bất kỳ phương thức gọi API nào khác như Patch hoặc Purge hoặc bất cứ thứ gì tương tự. Những điều này bạn cần phải tìm ra chính mình. Nếu có một số phép thuật đang diễn ra trong bài đăng này, tôi hy vọng các ví dụ của tôi có thể cho bạn hiểu rõ hơn.

Gần đây tôi đã viết phần 2 cho bài đăng này, sẽ nói về việc tạo ra một khóa auth-key (utoken) trước khi chúng tôi thực hiện các cuộc gọi của chúng tôi. Hãy chắc chắn để kiểm tra nó ở đây là tốt!