RAW POST menggunakan cURL di PHP

126

Bagaimana saya bisa melakukan RAW POST di PHP menggunakan cURL?

Posting mentah seperti tanpa pengkodean apa pun, dan data saya disimpan dalam string. Data harus diformat seperti ini:

... 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

Salah satu opsinya adalah menulis secara manual seluruh header HTTP yang dikirim, tetapi tampaknya kurang optimal.

Bagaimanapun, bisakah saya meneruskan opsi ke curl_setopt () yang mengatakan gunakan POST, gunakan teks / polos, dan kirim data mentah dari a $variable?

Yang tidak diketahui
sumber

Jawaban:

229

Saya baru saja menemukan solusinya, semacam menjawab pertanyaan saya sendiri jika ada orang lain yang tersandung padanya.

$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);
Yang tidak diketahui
sumber
4
akankah php mengatur header panjang konten untuk Anda atau haruskah Anda mengaturnya juga?
Eric Bloch
3
Saya tidak bisa membuat ini bekerja sama sekali. Saya memiliki halaman tempat saya mencoba memposting data mentah. Halaman itu mencatat semua data mentah yang diterimanya ke dalam tabel database. Tidak ada baris baru sama sekali. Apakah Anda tahu jika ada yang berubah di sini sejak '09?
Yakobus
1
Ini berfungsi untuk saya, tanpa menentukan header HTTP apa pun.
xryl669
12
Saya baru menyadari bahwa body di sini dapat menyertakan string json yang valid.
shasi kanth
1
Ada batasan 2G untuk posting mentah ini. Jika Anda mencoba mengirim file yang lebih besar dari 2G, file tersebut akan dipotong kembali menjadi 2G. Ini adalah batasan tipe string yang dimuat.
Kaden Yealy
5

Implementasi dengan perpustakaan Guzzle:

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

Ekstensi PHP CURL:

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

Kode sumber

Serhii Andriichuk
sumber