PHPでcURLを使用したRAW POST


126

PHPでcURLを使用してRAW POSTを実行するにはどうすればよいですか?

エンコードなしの場合と同様に生の投稿で、私のデータは文字列に格納されます。データは次のようにフォーマットする必要があります。

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

1つのオプションは、送信されるHTTPヘッダー全体を手動で書き込むことですが、最適とは言えません。

とにかく、私はただcurl_setopt()にオプションを渡してPOSTを使用し、text / plainを使用し、生データを$variable

回答:


229

私は解決策を見つけました。誰か他の人がそれに遭遇した場合に備えて、私の質問に答えるようなものです。

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

4
PHPはcontent-lengthヘッダーを設定しますか、それとも設定する必要がありますか?
Eric Bloch

3
これはまったく機能しません。生データを投稿しようとしているページがあります。そのページは、受け取ったすべての生データをデータベーステーブルに記録します。新しい行はまったくありません。09年以降、ここで何か変わったことはありますか?
ジェームズ

1
これは、HTTPヘッダーを指定しなくても機能します。
xryl669 2014年

12
bodyがここに入ると、有効なjson文字列を含めることができることに気づきました。
shasi kanth 2015

1
この未加工の投稿には2Gの制限があります。2Gより大きいファイルを送信しようとすると、2Gに切り捨てられます。ロードされる文字列タイプの制限。
Kaden Yealy 16

5

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

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

ソースコード

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.