【问题标题】:guzzle ver 6 post method is not wokingguzzle ver 6 post 方法不起作用
【发布时间】:2015-08-31 20:06:46
【问题描述】:

在邮递员中工作(原始格式数据与 application/json 类型) 带嘴6

url-http://vm.xxxxx.com/v1/hirejob/
{
        "company_name":" company_name",
        "last_date_apply":"06/12/2015",
        "rid":"89498"
}

所以我得到响应 201 创建
但在狂饮中

    $client = new Client();
    $data = array();
    $data['company_name'] = "company_name";
    $data['last_date_apply'] = "06/12/2015";
    $data['rid'] = "89498";
    $url='http://vm.xxxxx.com/v1/hirejob/';
    $data=json_encode($data);
    try {
            $request = $client->post($url,array(
                    'content-type' => 'application/json'
            ),array());

        } catch (ServerException $e) {
          //getting GuzzleHttp\Exception\ServerException Server error: 500
        }

我在vendor/guzzlehttp/guzzle/src/Middleware.php 上遇到错误

第 69 行

 ? new ServerException("Server error: $code", $request, $response)

【问题讨论】:

标签: php guzzle


【解决方案1】:

您实际上并没有设置请求正文,但可以说传输 JSON 数据的最简单方法是使用专用请求选项:

$request = $client->post($url, [
    'json' => [
        'company_name' => 'company_name',
        'last_date_apply' => '06/12/2015',
        'rid' => '89498',
    ],
]);

【讨论】:

  • @RahulG 不过,您的问题中没有提到这一点。
  • @RahulG 我已经更新了我的答案;它应该适用于最新版本的 lib
  • 谢谢你节省了我的时间
【解决方案2】:

您需要使用 json_encode() JSON_FORCE_OBJECT 标志作为第二个参数。像这样:

$data = json_encode($data, JSON_FORCE_OBJECT);

如果没有 JSON_FORCE_OBJECT 标志,它将创建一个带有括号表示法而不是大括号表示法的 json 数组。

另外,尝试发送这样的请求:

$request = $client->post($url, [
    'headers' => [ 'Content-Type' => 'application/json' ],
    'body' => $data
]);

【讨论】:

  • $data = json_encode($data, JSON_FORCE_OBJECT);不工作
  • 结合上面的答案试试这个。
  • 您必须设置要发送的数据,并且需要将其正确格式化为 JSON 对象。
  • 我检查的是那个是 json 对象
  • 我刚刚更新了我的答案。现在看看这个请求是否适合你。
猜你喜欢
  • 2019-01-21
  • 2017-01-05
  • 2016-04-16
  • 1970-01-01
  • 2023-04-04
  • 2016-03-08
  • 1970-01-01
  • 2018-08-23
  • 2015-03-19
相关资源
最近更新 更多