如何让 GuzzleHttp 客户端正确发送 POST 请求?

时间:2021-07-04 21:15:58

标签: php rest post guzzle guzzlehttp

根据 GuzzleHttp/Guzzle v7 (https://docs.guzzlephp.org/en/stable/quickstart.html#sending-form-fields) 的文档,应该可以选择使用这两个函数向 URL(例如 http://localhost/form.php)发送常规 POST 请求...

所以我的 form.php 看起来像这样:

<?php
var_dump([
    'REQUEST' => $_REQUEST,
    'GET'     => $_GET,
    'POST'    => $_POST,
]);

还有这样的 Guzzle-Code:

<?php

require __DIR__ . '/vendor/autoload.php';

use GuzzleHttp\Client;

$client = new GuzzleHttp\Client([
    'base_uri' => 'http://localhost',
]);

$r1 = $client->post( '/form.php', [
    'json' => [
        'lorem' => 'ipsum',
    ]
]);

echo $r1->getBody()->getContents() . "\n\n============\n\n";

$r2 = $client->request( 'POST', '/form.php', [
    'json' => [
        'lorem' => 'ipsum',
    ]
]);

echo $r2->getBody()->getContents();

... 运行 guzzle 代码的结果显示:

array(3) {
  ["REQUEST"]=>
  array(0) {
  }
  ["GET"]=>
  array(0) {
  }
  ["POST"]=>
  array(0) {
  }
}


============

array(3) {
  ["REQUEST"]=>
  array(0) {
  }
  ["GET"]=>
  array(0) {
  }
  ["POST"]=>
  array(0) {
  }
}

我错过了什么/搞砸了什么? ...

浏览器中对 http://localhost/form.php?asdf 的请求导致(正确的)响应:

array(3) {
  ["REQUEST"]=>
  array(1) {
    ["asdf"]=>
    string(0) ""
  }
  ["GET"]=>
  array(1) {
    ["asdf"]=>
    string(0) ""
  }
  ["POST"]=>
  array(0) {
  }
}

0 个答案:

没有答案