CURLOPT_POST vs. CURLOPT_POSTFIELDS: Ist die Option CURLOPT_POST erforderlich?

Lesezeit: 3 Minuten

CURLOPT POST vs CURLOPT POSTFIELDS Ist die Option CURLOPT POST erforderlich
Sanjay Maurya

Ich bin neu in cURL in PHP. Ich habe eine Frage zur Verwendung von Curl-Optionen.

Betrachten Sie zwei Skriptdateien: test1.php und test2.php, die beide im Stamm www vorhanden sind. Ich benutze Ubuntu 12.04 LTS. Die libcurl-Version für PHP ist 7.22.0.

Inhalt von test1.php

<?php
    $ch = curl_init();
    $post_data = array(
        'firstname' => 'John',
        'lastname' => 'Doe'
    );
    curl_setopt($ch, CURLOPT_URL, 'localhost/test2.php');
    curl_setopt($ch, CURLOPT_POST, TRUE);   //is it optional?
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_exec($ch);
    curl_close($ch);
?>

Inhalt von test2.php

<?php 
    var_dump($_POST);
?>

Wenn ich test1.php über den Browser ausführe, kann ich die veröffentlichten Ergebnisse sehen. Wenn ich jetzt die Curl-Option entferne, die enthält CURLOPT_POST, das Beispiel funktioniert immer noch. Auch wenn ich setze CURLOPT_POST auf false, post wird ausgeführt und das Ergebnis wird angezeigt. Also, ist das CURLOPT_POST überhaupt nicht erforderlich? Es sieht Option aus CURLOPT_POSTFIELDS kümmert sich um den Datenversand per POST ohne Verwendung von CURLOPT_POST Möglichkeit. Wenn ich drucke $_SERVER in test2.php ist die Request-Methode immer auf gesetzt POST (mit oder ohne Option CURLOPT_POST).

Könnte mir bitte jemand die genaue Verwendung von CURLOPT_POST Möglichkeit? Ist es notwendig, Daten per zu senden? POST?

  • Ja. Um die Anforderungsmethode „post“ in curl festzulegen, setzen wir curl_setopt($ch, CURLOPT_POST, TRUE); und um Daten zu senden, verwenden wir ein assoziatives Array. Und wenn das Array multiminsional ist, verwenden wir json_encode für die innere Ebene.

    – Abhisek Malakar

    4. November 2014 um 6:07 Uhr

  • Hast du die Frage richtig gelesen? Ich frage nicht, was diese Optionen CURLOPT_POSTFIELDS und CURLOPT_POST bewirken. Haben Sie Beispiele ausprobiert, die ich erwähnt habe?

    – Sanjay Maurya

    4. November 2014 um 12:00 Uhr


1647119047 812 CURLOPT POST vs CURLOPT POSTFIELDS Ist die Option CURLOPT POST erforderlich
Niklesh_Chauhan

Du hast Recht. CURLOPT_POSTFIELDS impliziert CURLOPT_POST. Sie müssen nicht verwenden CURLOPT_POST während dem Benutzen CURLOPT_POSTFIELDS. Die Anfragemethode wird in diesem Fall immer auf POST gesetzt.

Beachten Sie, dass dies in Ihrem Fall so lange ist, wie Sie es möchten POST Anfrage.

Wenn du es nicht sein willst a POST anfordern, aber festlegen CURLOPT_POSTFIELDSlesen Sie bitte diese verwandten Fragen und Antworten:

  • So wechseln Sie von POST zu GET in PHP CURL

Für zukünftige Referenzen sagt das API-Dokument dies über CURLOPT_POST


Zusammenfassung:

Ein wahrer Parameter weist die Bibliothek an, einen regulären HTTP-Post auszuführen. Dadurch verwendet die Bibliothek auch den Header „Content-Type: application/x-www-form-urlencoded“. (Dies ist bei weitem die am häufigsten verwendete POST-Methode).

Verwenden Sie die Option CURLOPT_POSTFIELDS, um anzugeben, welche Daten gepostet werden sollen, und CURLOPT_POSTFIELDSIZE, um die Datengröße festzulegen. Optional können Sie mit den Optionen CURLOPT_READFUNCTION und CURLOPT_READDATA Daten für POST bereitstellen.

Sie können den standardmäßigen POST Content-Type:-Header überschreiben, indem Sie Ihren eigenen mit CURLOPT_HTTPHEADER festlegen.

Die Verwendung von POST mit HTTP 1.1 impliziert die Verwendung eines „Expect: 100-continue“-Headers. Sie können diesen Header wie gewohnt mit CURLOPT_HTTPHEADER deaktivieren.

Wenn Sie POST an einen HTTP 1.1-Server verwenden, können Sie Daten senden, ohne die Größe zu kennen, bevor Sie POST starten, wenn Sie Chunked Encoding verwenden. Sie aktivieren dies, indem Sie einen Header wie „Transfer-Encoding: chunked“ mit CURLOPT_HTTPHEADER hinzufügen. Bei HTTP 1.0 oder ohne Chunked Transfer müssen Sie die Größe in der Anfrage angeben.

Wenn Sie eine POST-Anforderung ausgegeben haben und stattdessen eine HEAD- oder GET-Anforderung ausführen möchten, müssen Sie den neuen Anforderungstyp explizit mit CURLOPT_NOBODY oder CURLOPT_HTTPGET oder ähnlichem auswählen.


Ich teste gerade, ob das Festlegen von CURLOPT_POST, um es zu versuchen, meine CURLOPT_HTTPHEADER, “Content-Type: application/json; charset=utf-8”-Einstellung überschreibt.

995180cookie-checkCURLOPT_POST vs. CURLOPT_POSTFIELDS: Ist die Option CURLOPT_POST erforderlich?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy