it-swarm.com.de

PHP cURL GET Anfrage und Body der Anfrage

ich versuche, cURL für eine GET-Anfrage wie folgt zu verwenden:

function connect($id_user){
    $ch = curl_init();
    $headers = array(
    'Accept: application/json',
    'Content-Type: application/json',

    );
    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);

    // Timeout in seconds
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $authToken = curl_exec($ch);

    return $authToken;
}

Wie Sie sehen, möchte ich $ body als Body der Anfrage übergeben, aber ich weiß nicht, ob sie korrekt ist oder nicht, und ich kann dies nicht wirklich debuggen. Wissen Sie, ob das Recht ist, curl_setopt($ch, CURLOPT_POSTFIELDS,$body); mit einer GET-Anfrage zu verwenden?

Weil dieser gesamte Code perfekt mit POST funktioniert, versuche ich jetzt, dies in GET zu ändern, wie Sie sehen können

19
itsme

CURLOPT_POSTFIELDS ist, wie der Name schon sagt, für den Hauptteil (Nutzlast) einer POST-Anforderung. Bei GET-Anforderungen ist die Nutzlast Teil der URL in Form einer Abfragezeichenfolge.

In Ihrem Fall müssen Sie die URL mit den Argumenten erstellen, die Sie senden müssen (falls vorhanden), und die anderen Optionen in cURL entfernen.

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);
25
Burhan Khalid

Die akzeptierte Antwort ist falsch. GET-Anforderungen können tatsächlich einen Körper enthalten. Dies ist die Lösung implementiert durch WordPress als Beispiel:

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

BEARBEITEN: Um zu klären, ist der anfängliche curl_setopt in diesem Fall nicht notwendig, verursacht aber keinen Schaden. Es wurde eingefügt, um den referenzierten Beispielcode vollständig zu veranschaulichen.

19
Dan
  <?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);
  $new=   $result->status;
  if( $new =="1")
  {
    echo "<script>alert('Student list')</script>";
  }
  else 
  {
    echo "<script>alert('Not Removed')</script>";
  }

  ?>
4

Bei Problemen mit ähnlichen Problemen können Sie mit dieser Anforderungsbibliothek externe http-Anforderungen ohne Probleme in Ihrer PHP-Anwendung ausführen. Vereinfachte GET-, POST-, PATCH-, DELETE- und PUT-Anforderungen.

Eine Musteranfrage wäre wie folgt 

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

Dokumentation dazu finden Sie in README.md des Projekts .

0
Danny Sofftie