首页 > 解决方案 > GuzzleHTTP Post 请求正文包含查询

问题描述

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

有谁知道如何解决这个问题?我真的找不到任何关于它的信息,也找不到 GuzzleHTTP 的文档或谷歌搜索。

我想使用正则表达式会起作用,但如果可能的话,我想使用一种不太脆弱的方法。

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

string(39) "aUnid%5B0%5D=20005&aUnid%5B1%5D=2008026"\n "hello" 如您所见,在这种情况下,它会将我的参数与结果(即“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 通信。

标签: phplaravelpostguzzle

解决方案


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

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


推荐阅读