CloudMQTT API Guzzle

时间:2017-02-22 19:18:14

标签: php laravel api mqtt guzzle

我将curl转换为guzzle请求时遇到问题。 在创建用户的文档中,我只需要发布:

$ curl -XPOST -d '{"username":"test", "password":"super_secret_password"}' -H         "Content-Type:application/json" -u "$CLOUDMQTT_USER:$CLOUDMQTT_PASSWORD"     https://api.cloudmqtt.com/user

在我的项目中我不能使用curl,所以我使用guzzle:

$client = new Client();

$res = $client->post('https://api.cloudmqtt.com/user', ['auth' =>  ['xxx', 'xxx'], 'body' => ["username"=>"user", "password"=>"super_secret_password"]]);

创建用户后,我可以在面板上的用户列表中看到新用户,但服务器在创建用户时响应500。我究竟做错了什么?也许我的guzzle请求是错误的格式?我不知道

https://www.cloudmqtt.com/docs-api.html指向API的链接

1 个答案:

答案 0 :(得分:1)

这会将你的Guzzle请求与curl请求相匹配,虽然我不能肯定地说会解决你的500错误:

$client = new Client([
    'headers' => [ 'Content-Type' => 'application/json' ]
]);

$response = $client->post('https://api.cloudmqtt.com/user',
    [
        'auth' =>  ['xxx', 'xxx'],
        'body' => json_encode(
            [
                "username"=>"user",
                "password"=>"super_secret_password"
            ]
        )
    ]
);

这里的区别包括设置Content-Type标头以及将主体编码为json而不是数组(这里可能没有效果?)。

编辑: 看起来json参数会自动为您设置标题和json_encode正文:

$client = new Client();

$response = $client->post('https://api.cloudmqtt.com/user',
    [
        'auth' =>  ['xxx', 'xxx'],
        'json' =>
            [
                "username"=>"user",
                "password"=>"super_secret_password"
            ]
    ]
);

Docs