我正在尝试使用Guzzle将我的Laravel框架连接到我的服务器。每个GET请求没有参数,但我有问题的POST。
这个请求使用cURL可以正常工作:
curl -i -X POST -H 'Content-Type: application/json' -d '{"email":"user@domain.com", "pwd":"xxxxxx"}' http://www.example.com:1234/rest/user/validate
这就是我试图用Guzzle实现的:
$response = GuzzleHttp'post('http://www.example.com:1234/rest/user/validat', [
'headers' => ['Content-Type' => 'application/json'],
'body' => ['{"email":"user@domain.com", "pwd":"xxxxxx"}']
]);
print_r($response->json());
当我发出请求时,得到下一个错误:
[status code] 415 [reason phrase] Unsupported Media Type
我认为是与body
有关的东西,但我不知道如何解决它。
任何想法?
不需要在body
值周围加上方括号。此外,确保有一个Accept
头定义。你应该用这个代替:
$response = GuzzleHttp'post('http://www.example.com:1234/rest/user/validat', [
'headers' => ['Content-Type' => 'application/json', 'Accept' => 'application/json'],
'body' => '{"email":"user@domain.com", "pwd":"xxxxxx"}'
]);
print_r($response->json());
就是这样的
'Accept' => '*/*'
!
Guzzle 6因为符合PSR-7而取消了json()
方法(参考https://github.com/guzzle/guzzle/issues/1106)。因此,如果你使用的是较早的版本,低端的答案可能有效;对于版本6的用户,使用以下命令:
$response = GuzzleHttp'post('http://www.example.com:1234/rest/user/validat', [
'headers' => ['Content-Type' => 'application/json', 'Accept' => 'application/json'],
'body' => '{"email":"user@domain.com", "pwd":"xxxxxx"}'
]);
print_r(json_decode($response->getBody(), true));
删除" Content-Type:application/json "之间的空格并将其修改为" Content-Type:application/json "