如何解决Laravel 没有正确发出 Guzzle HTTP POST 请求
我正在处理 megento 集成,并尝试通过使用表单数据发出 post 请求来获取管理员访问令牌。我在 Postman 上测试了这条路线,它工作正常:
但是,当我尝试使用 Guzzle Http Client 在 Laravel 中实现相同的请求时,它似乎无法正确发出请求,就好像表单数据帖子正文未被识别一样,并且它不断向我显示错误,说明字段值是必要的。这是我的要求:
$client = new \GuzzleHttp\Client();
$response = $client->post($request['magento_domain'] . '/rest/V1/integration/admin/token',[
'form_params' => [
'username' => $magento_admin_username,'password' => $magento_admin_password
],[
'Accept' => 'application/json','Content-Type' => 'application/json'
]
]);
然后这是我不断收到的错误:
更新:我也试过这样的请求,它抛出同样的错误:
$response = $client->post($request['magento_domain'] . '/rest/V1/integration/admin/token','password' => $magento_admin_password
]
]);
我将不胜感激!
解决方法
发送表单数据正文时,“Content-Type: application/json”请求标头不正确。
只需删除它,Guzzle 会在使用“form_params”时自动添加正确的 Content-Type。只是 JSON 是错误的,因为正文显然不是 JSON。
我在生产中成功使用了 JSON 请求:
$res = $this->client->request('POST','https://.../rest/V1/integration/admin/token',[
'headers' => [
'Accept' => 'application/json','content-type' => 'application/json'
],'json' => [
'username' => config('app.shopUser'),'password' => config('app.shopPw')
]
]);
或者尝试使用“multipart”而不是“form_params” - 这应该发送一个 multipart/form-data
请求,这就是 Postman 对“form-data”的意思。
“form_params”相当于“x-www-form-urlencoded”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。