PHP cURL GET request and request's body

前端 未结 5 1260
礼貌的吻别
礼貌的吻别 2020-12-05 00:23

i\'m trying using cURL for a GET request like this:

function connect($id_user){
    $ch = curl_init();
    $headers = array(
    \'Accept: application/json\'         


        
相关标签:
5条回答
  • 2020-12-05 00:29

    CURLOPT_POSTFIELDS as the name suggests, is for the body (payload) of a POST request. For GET requests, the payload is part of the URL in the form of a query string.

    In your case, you need to construct the URL with the arguments you need to send (if any), and remove the other options to cURL.

    curl_setopt($ch, CURLOPT_URL, $this->service_url.'user/'.$id_user);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    
    //$body = '{}';
    //curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
    //curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    0 讨论(0)
  • 2020-12-05 00:34
      <?php
      $post = ['batch_id'=> "2"];
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL,'https://example.com/student_list.php');
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
      $response = curl_exec($ch);
      $result = json_decode($response);
      curl_close($ch); // Close the connection
      $new=   $result->status;
      if( $new =="1")
      {
        echo "<script>alert('Student list')</script>";
      }
      else 
      {
        echo "<script>alert('Not Removed')</script>";
      }
    
      ?>
    
    0 讨论(0)
  • 2020-12-05 00:48

    For those coming to this with similar problems, this request library allows you to make external http requests seemlessly within your php application. Simplified GET, POST, PATCH, DELETE and PUT requests.

    A sample request would be as below

    use Libraries\Request;
    
    $data = [
      'samplekey' => 'value',
      'otherkey' => 'othervalue'
    ];
    
    $headers = [
      'Content-Type' => 'application/json',
      'Content-Length' => sizeof($data)
    ];
    
    $response = Request::post('https://example.com', $data, $headers);
    // the $response variable contains response from the request
    

    Documentation for the same can be found in the project's README.md

    0 讨论(0)
  • 2020-12-05 00:48

    you have done it the correct way using

    curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
    

    but i notice your missing

    curl_setopt($ch, CURLOPT_POST,1);
    
    0 讨论(0)
  • 2020-12-05 00:52

    The accepted answer is wrong. GET requests can indeed contain a body. This is the solution implemented by WordPress, as an example:

    curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $body );
    

    EDIT: To clarify, the initial curl_setopt is necessary in this instance, because libcurl will default the HTTP method to POST when using CURLOPT_POSTFIELDS (see documentation).

    0 讨论(0)
提交回复
热议问题