2017-03-15 8 views
2

私のLaravelアプリケーションでは、定期的にGuzzleを使用してPOSTデータをAPIに送信する必要があります。POSTリクエストは郵便配達では動作しますが、Guzzleでは使用できません

APIは認証のためのベアラトークンを使用し、raw jsonを要求して受け入れます。テストするために、私はPostmanを使ってAPIにアクセスしました。

ポストマンヘッダ:

Accept:application/json 
Authorization:Bearer [token] 
Content-Type:application/json 

そしてポストマンボディ:

{ 
    "request1" : "123456789", 
    "request2" : "2468", 
    "request3" : "987654321", 
    "name" : "John Doe" 
} 

ポストマンは、レスポンスとして200、およびJSONオブジェクトを返します。

今、Guzzleで同じことを試してみると、ステータスコードは200になりますが、JSONオブジェクトは返されません。ここに私のGuzzle実装があります:

public function getClient($token) 
{ 
    return new Client([ 
     'base_uri' => env('API_HOST'), 
     'Accept' => 'application/json', 
     'Authorization' => 'Bearer ' . $token, 
     'Content-Type' => 'application/json' 
    ]); 
} 

$post = $client->request('POST', '/path/to/api', [ 
    'json' => [ 
     'request1' => 123456789, 
     'request2' => 2468, 
     'request3' => 987654321, 
     'name' => 'John Doe', 
    ] 
]); 

GuzzleでJSONをポストするにはいくつかのトリックがありますか?そうでない場合、フードの下で何が起こっているのかをデバッグする方法はありますか?

私の人生の間、Postman POSTとGuzzle POSTの違いは何かを理解できません。

+0

Guzzle 6? ... json_decode($ response-> getBody())を使用してjsonを応答から外していますか? – Serge

答えて

2

ヘッダーにはheaders設定セクションを使用する必要があります(ルートレベルではありません)。

return new Client([ 
    'base_uri' => env('API_HOST'), 
    'headers' => [ 
     'Accept' => 'application/json', 
     'Authorization' => 'Bearer ' . $token, 
     'Content-Type' => 'application/json', 
    ], 
]); 
関連する問題