問題描述
在 PHP 中使用 cURL 的 RAW POST (RAW POST using cURL in PHP)
How can I do a RAW POST in PHP using cURL?
Raw post as in without any encoding, and my data is stored in a string. The data should be formatted like this:
... 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
One option is to manually write the entire HTTP header being sent, but that seems less optimal.
Anyway, can I just pass options to curl_setopt() that say use POST, use text/plain, and send the raw data from a $variable
?
‑‑‑‑‑
參考解法
方法 1:
I just found the solution, kind of answering to my own question in case anyone else stumbles upon it.
$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);
方法 2:
Implementation with Guzzle library:
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 extension:
$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);
Source code
(by The Unknown、The Unknown、Serhii Andriichuk)