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

Laravel not making Guzzle HTTP POST request correctly

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

但是,当我尝试使用 Guzzle Http Client 在 Laravel 中实现相同的请求时,似乎无法正确发出请求,就好像表单数据 post 正文未被识别一样,它一直向我显示错误,说字段值是必需的。这是我的要求:

$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', [
    'form_params' => [
        'username' => $magento_admin_username,
        'password' => $magento_admin_password
    ]
]);

如有任何帮助,我将不胜感激!

发送 form-data body 时,“Content-Type: application/json”请求 header 不正确。

去掉即可,Guzzle在使用“form_params”时自动添加正确的Content-Type。只是 JSON 是错误的,因为 body 显然不是 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”。