postmanでraw jsonを介してPOSTデータを送信する


107

Postman(Chromeで開かないもの)があり、生のjsonを使用してPOSTリクエストを実行しようとしています。

「ボディ」タブで、「raw」を選択し、「JSON(アプリケーション/ json)」に次のボディを設定しました。

{
    "foo": "bar"
}

ヘッダーには1があります Content-Type: application/json

PHP側ではprint_r($_POST);、今のところやっているだけで、空の配列を取得しています。


私がjQueryを使用して行う場合:

$.ajax({
    "type": "POST",
    "url": "/rest/index.php",
    "data": {
        "foo": "bar"
    }
}).done(function (d) {
    console.log(d);
});

私は期待通りになっています:

Array
(
    [foo] => bar
)

では、なぜそれがPostmanで機能しないのですか?


郵便配達のスクリーンショット:

ここに画像の説明を入力してください

およびヘッダー:

ここに画像の説明を入力してください


)(代わりますprint_r)$ _POSTとのvar_dump($ _REQUESTの代わりに試してみてください
ディープ

@Deep私array(1) {["foo"]=> string(3) "bar"}はjQueryで取得しますが、Postmanで空の配列を取得します:array(0) {}
Dallas

ポストマンは、要求を送信していないので
ディープ

あなたのポストで@smerny fieldsfoo文句を言わない一致ので、それは動作しません、イムないでください、それはタイプミスですが、彼らは一致させる場合
メダ

@meda、それはタイプミスでしたが、フィールドがある場合は、$ _ REQUESTまたは$ _POSTのvarダンプに出力が残っているはずです
Dallas

回答:


38

jQueryraw とは異なり、JSONPHPでデコードする必要があります。

print_r(json_decode(file_get_contents("php://input"), true));

php://input リクエスト本文から生データを読み取ることができる読み取り専用ストリームです。

$_POSTはフォーム変数です。formラジオボタンに切り替えてpostman使用する必要があります。

foo=bar&foo2=bar2

jsonで投稿するにはjquery

$.ajax({
    "url": "/rest/index.php",
    'data': JSON.stringify({foo:'bar'}),
    'type': 'POST',
    'contentType': 'application/json'
});

はいexaclty投稿jsonと投稿変数は異なります
meda

43

バイナリの横にあるドロップダウンからJSONオプションを確認してください。あなたが生をクリックしたとき。これはすべきです

スキルsynonはjsonをpostmanに渡します


4
これはかなり古い投稿ですが、質問を見ると、私がそれを正確に実行したことがわかります。質問、選択した回答、および選択した回答のコメントを読んで、問題と解決策をよりよく理解することができます。
ダラス

1
確かに、これは実際に私が抱えていた問題を特定しました。ヘッダーセクションで既に言及されているにもかかわらず、application / jsonではなく「Text」を選択しました。ややこしい; 「テキスト」を選択すると、jsonだけでなく完全なPOST呼び出しであるため、私が機能すると予想したJSONを含め、HTTP POSTの「コード」全体が表示されます。
テッド

7

medaの答えは完全に合法ですが、コードをコピーするとエラーが発生しました。

どこかに"php://input"無効な文字があります(おそらく引用符の1つですか?)。

"php://input"コードを手動で入力したところ、うまくいきました。理解するのにしばらくかかりました!


1
私がもう少し下にスクロールしてこれを見てうれしい-私は同じ問題を抱えていました。良い発見!
チャーリースタナード

2
medaの投稿の編集で誰かが修正したようです。しかし、編集履歴を調べたところ、元の投稿には200c 200b「入力」の「n」と「p」の間に(幅がゼロの文字)があることがわかりました。彼がどうやってそれを成し遂げたのかはわかりませんが、現在は修正されています。
ダラス

6

私は同じ問題に直面していました、次のコードが私のために働きました:

$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);


1

Postmanネイティブアプリをインストールします。Chrome拡張機能は廃止されました。(自分のウィンドウで開いていましたが、それでもChromeアプリとして実行されていました)


2
これは質問の答えにはなりません。
jhpratt

@jhprattは実際にそうします。同じ問題がありました。Postmanアプリを使用すると、うまくいきました。質問です:では、なぜそれがPostmanで機能しないのですか?
JaroslavŠtreit19年1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.