我正在尝试使用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
有关,但我不知道如何解决它。
有什么想法吗?
答案 0 :(得分:10)
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());
答案 1 :(得分:1)
由于符合PSR-7标准,Guzzle 6删除了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));
答案 2 :(得分:0)
删除'Content-Type:application / json'之间的空格并将其修改为'Content-Type:application / json'为我工作
答案 3 :(得分:0)
以这种方式工作
'Accept' => '*/*'
祝你好运!