GuzzleHTTP Post请求主体包含查询

时间:2018-10-19 08:06:52

标签: php laravel post guzzle

我正在尝试通过GuzzleHTTP与外部应用程序(运行Laravel)进行通信,并且数据已正确发布并返回,但是我将发布的参数返回到正文响应中-这使得json_decode()无法正常工作正确地

有人知道如何解决此问题吗?无论是在GuzzleHTTP的文档还是Googling的文档中,我都找不到任何有关它的东西。

我猜想使用正则表达式是可以的,但是如果可能的话,我想使用一种不那么脆弱的方法。

我得到的响应如下(编码为json字符串):

  

string(39)“ aUnid%5B0%5D = 20005&aUnid%5B1%5D = 2008026” \ n“你好”   如您所见,在这种情况下,它会将我的参数以及结果(“ hello”)一起发布。

用于发布数据的代码是这样的:

$http = new \GuzzleHttp\Client([
    'base_uri' => $baseUrl
]);

$uri = "/api/deliveries/read";
$response = $http->request("POST", $uri, [
    'headers' => [
        'Authorization' => "Bearer " . $accessToken,
        'Content-Type' => 'application/json',
        'Accept' => 'application/json',
    ],
    GuzzleHttp\RequestOptions::JSON => [
        'kmUnids' => [
            20005, 2008026
        ]
    ],
    'timeout' => 5
]);

echo $response->getBody();

外部应用程序中使用的代码如下:

/**
 * @param Request $request
 * @return JsonResponse
 */
public function getData (Request $request) : JsonResponse
{
    $request->validate([
        'kmUnids' => 'required|min:1|array'
    ]);
    /** @noinspection PhpUndefinedFieldInspection */
    $ids = $request->kmUnids;


    return \Response::json(
        "hello"
    );
}

两个应用程序都在运行Laravel(5.7),并且正在使用Laravel Passport进行OAUTH2通信。

1 个答案:

答案 0 :(得分:0)

您应该像这样解码返回结果:

$ return_result = json_decode($ response-> getBody()); $ data = $ res-> data;