cURL适用于我的REST API,但Guzzle不行


cURL works for my REST API but Guzzle not

我正在尝试使用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 "