我将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请求是错误的格式?我不知道
答案 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"
]
]
);