POST请求适用于Postman,但不适用于Guzzle
问题描述:
在我的Laravel应用程序中,我定期需要使用Guzzle将数据发布到API。POST请求适用于Postman,但不适用于Guzzle
这个API用户是一个承载令牌来验证,并请求和接受原始的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?如果没有,有没有办法在引擎盖下进行调试?
对于我的生活,我无法理解邮差POST和Guzzle POST之间的区别。
答
您必须使用headers
配置节标题,而不是根级别。
return new Client([
'base_uri' => env('API_HOST'),
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $token,
'Content-Type' => 'application/json',
],
]);
Gu 6 6? ...您正在使用json_decode($ response-> getBody())将json从您的响应中取出? – Serge