web-dev-qa-db-de.com

RAW POST using cURL in PHP

Wie kann ich eine RAW POST in PHP mit cURL?

Rohe Post wie in ohne Kodierung, und meine Daten werden in einer Zeichenfolge gespeichert. Die Daten sollten folgendermaßen formatiert sein:

... usual HTTP header ...
Content-Length: 1039
Content-Type: text/plain

89c5fdataasdhf kajshfd akjshfksa hfdkjsa falkjshfsa
ajshd fkjsahfd lkjsahflksahfdlkashfhsadkjfsalhfd
ajshdfhsafiahfiuwhflsf this is just data from a string
more data kjahfdhsakjfhsalkjfdhalksfd

Eine Möglichkeit besteht darin, den gesamten HTTP-Header, der gesendet wird, manuell zu schreiben. Dies scheint jedoch weniger optimal zu sein.

Wie auch immer, kann ich einfach Optionen an curl_setopt () übergeben, die POST verwenden, text/plain verwenden und die Rohdaten von einem $variable Senden?

112
The Unknown

Ich habe gerade die Lösung gefunden und meine eigene Frage beantwortet, falls jemand anderes darauf stößt.

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,            "http://url/url/url" );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_POSTFIELDS,     "body goes here" ); 
curl_setopt($ch, CURLOPT_HTTPHEADER,     array('Content-Type: text/plain')); 

$result=curl_exec ($ch);
205
The Unknown

Implementierung mit Guzzle-Bibliothek:

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->post(
    'https://postman-echo.com/post',
    [
        RequestOptions::BODY => 'POST raw request content',
        RequestOptions::HEADERS => [
            'Content-Type' => 'application/x-www-form-urlencoded',
        ],
    ]
);

echo(
    $response->getBody()->getContents()
);

PHP CURL Erweiterung:

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/post',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify POST method
     */
    CURLOPT_POST => true,

    /**
     * Specify request content
     */
    CURLOPT_POSTFIELDS => 'POST raw request content',
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

echo($response);

Quellcode

1