【问题标题】:PHP Http Post request with json response: no valid json带有json响应的PHP Http Post请求:没有有效的json
【发布时间】:2017-03-12 21:07:59
【问题描述】:

如果我向 API 发送以下请求,它会说我没有使用有效的 JSON 字符串。如何在有效的 PHP 发布请求中转换我的 JSON?我正在使用 guzzle:

$client = new Client();
$res = $client->request('POST', 'https://fghfgh', [
    'auth' => ['user', 'pw']
]);
$res->getStatusCode();
$res->getHeader('application/json');


$res->getBody('{
     "category": "ETW",
     "date": "2017-03-02",
     "address": {
         "nation": "DE",
         "street": "abc",
         "house_number": "7",
         "zip": "80637",
         "town": "München"
     },
     "construction_year": "1932",
     "living_area": "117.90",
     "elevator": false,
     "garages": false
}');

【问题讨论】:

  • 函数getBody()是做什么的?
  • 我很确定您需要在发出请求时发送 JSON。
  • 首先在谷歌上搜索 validate json 并使用众多验证器之一来检查您的 json。
  • 据我所知,Response::getBody 接受任何参数

标签: php json http post guzzle


【解决方案1】:

documentation中所述

您需要将所需的标头传递给您的响应对象,如下所示:

$res = $client->request('POST', 'https://fghfgh', [
    'auth' => ['user', 'pw'],
    'headers' => [
        'Content-Type' => 'application/json',
        'Accept' => 'application/json',
    ]
]);

【讨论】:

    【解决方案2】:

    当我让 php 解码 json 时,它不会给出任何错误,所以首先想到的是 München 有一个变音符号。如果您不使用元音变音尝试此操作会发生什么?

    话虽如此,我建议您使用 PHP 数组并将其编码为 json 字符串,而不是仅仅输入 json 字符串。这是因为 PHP 可以检查数组的语法,并且您可以立即知道它是对还是错。如果选项 A 不起作用,这可能会解决您的问题。

    看起来像这样:

    $data = [
      'category' => 'ETW',
      'date' => '2017-03-02',
      'address' => [
        'nation' => 'DE',
        'street' => 'abc',
        'house_number' => 7,
        'zip' => '80637',
        'town' => 'Munchen'
      ],
      'construction_year' => 1932,
      'living_area' => '117.90',
      'elevator' => false,
      'garages' => false,
    ];
    
    $res->getBody(json_encode($data));
    

    【讨论】:

      【解决方案3】:

      在我看来,如果您打算POST JSON 数据

      ,您应该使用json 选项
      $client->post('https://fghfgh', [
          'auth' => ['user', 'pw'],
          'json' => [
              'category'          => 'ETW',
              'date'              => '2017-03-02',
              'address'           => [
                  'nation'       => 'DE',
                  'street'       => 'abc',
                  'house_number' => '7',
                  'zip'          => '80637',
                  'town'         => 'München'
              ],
              'construction_year' => '1932',
              'living_area'       => '117.90',
              'elevator'          => false,
              'garages'           => false,
          ]
      ]);
      

      【讨论】:

        最近更新 更多