使用 Guzzle 通过 (POST) 检索 API,无法传递 JSON 参数进行查询

laural4705

我创建了一个 API 请求,它可以正常连接到服务器并通过基本身份验证。我收到的错误是

“未捕获的 GuzzleHttp\Exception\ClientException:客户端错误:POST http://my.api.com/dest/addr导致400 Bad Request响应:{"code":400,"result":"Missing customer id"

我尝试了很多方法来传递查询参数,但都没有奏效。我检查以确保输出的 JSON 格式正确。我已按照 Guzzle 文档中的说明进行操作。我也尝试了我能在论坛中找到的所有解决方案,但没有一个给我不同的回应。我不确定我错过了什么,希望有人能看到问题可能是什么......我已经粘贴了我认为最符合下面 Guzzle 文档的代码。谢谢。

    <?php
    require __DIR__.'/../vendor/autoload.php';
    use GuzzleHttp\Client;
    use GuzzleHttp\Exception\RequestException;
    Use GuzzleHttp\Psr7;

    try {

        $client = new Client(['base_uri' => 'http://my.api.com/']);
        $credentials = base64_encode('12345');

        $request_param = [
            'json' => [
                'customer' => [
                    'name' => 'Mary',
                    'id' => 111
                ],
                'products' => [
                    [
                        'product_id' => 2,
                        'qty' => 3
                    ]
                ]
            ]
        ];
        $request_data = json_encode($request_param, true);

        $headers = ['headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => 'Basic ' . $credentials
        ]];

        $response = $client->request('POST', 'dest/addr', $headers, $request_data);

        echo $response->getStatusCode();
        echo "<br />";
        echo $response->getHeader('content-type')[0];
        echo "<br />";
        echo "<pre />";
        echo $response->getBody()->getContents();
    }
    catch(\GuzzleHttp\Exception\ClientException $e) {
        echo $e->getCode(). '<hr />';
        echo $e->getMessage();
    }
        //Server Exception
    catch(\GuzzleHttp\Exception\ServerException $e) {
        echo $e->getCode(). '<hr />';
        echo $e->getMessage();
    }
从今起

如果您my.api.com可以接受json请求(不是在帖子正文中形成 params json=json_string&something=value)。您可以尝试这样

$json_data = [
    'customer' => [
        'name' => 'Mary',
        'id' => 111
    ],
    'products' => [
        [
            'product_id' => 2,
            'qty' => 3
        ]
    ]
];
$headers = [
    'Authorization' => 'Basic ' . $credentials
];

$response = $client->request('POST', 'dest/addr', [
    'json' => $json_data,
    'headers' => $headers
]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章