ElasticSearchのノリで、curlでjsonを飛ばしまくってたのですが、こちらの環境から、別のサーバーへデータを送信する際、jsonを飛ばして、受信側で必死にPOSTを取得してたけど、飛んでこなくて、なんでだろうと思って調べたメモです。

POSTでjsonを飛ばした時の受け取りは「file_get_contents(“php://input”)」

そいや、そんなのがあったな。。。と思って、あぁ…って感じでした。

ちなみに、送信元は以下のような感じ

■送信側

    $path='http://testtesttest.com/aaa/aaa.php';

    $header = array(
        "Content-Type: application/json"
    );

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $path);
    curl_setopt($curl,CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    $res = curl_exec($curl);
    curl_close($curl);

■受け取り側

$data_json = file_get_contents("php://input");
///$data_jsonに受け取ったjsonがテキストベースで入ってる

だそうです。

普通に配列で飛ばす時

別にjsonじゃなくても飛ぶんですよね。でもその時はheaderが違うらしい

■送信側

    $path='http://testtesttest.com/aaa/aaa.php';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $path);
    curl_setopt($curl,CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    $res = curl_exec($curl);
    curl_close($curl);

だってさ。メモっておきます

コメント