cURL适用于我的REST API但不是Guzzle

时间:2014-07-25 11:47:18

标签: php rest curl laravel-4 guzzle

我正在尝试使用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有关,但我不知道如何解决它。

有什么想法吗?

4 个答案:

答案 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' => '*/*'

祝你好运