微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 没有正确发出 Guzzle HTTP POST 请求

如何解决Laravel 没有正确发出 Guzzle HTTP POST 请求

我正在处理 megento 集成,并尝试通过使用表单数据发出 post 请求来获取管理员访问令牌。我在 Postman 上测试了这条路线,它工作正常:

enter image description here

但是,当我尝试使用 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'
    ]
]);

然后这是我不断收到的错误

enter image description here

更新:我也试过这样的请求,它抛出同样的错误

$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 举报,一经查实,本站将立刻删除。