如何在http客户端GET方法中传递对象?[复制]

How to pass object in http client GET method? [duplicate]

提问人:nas 提问时间:9/18/2023 最后编辑:Philnas 更新时间:9/21/2023 访问量:78

问:

我需要在 URL 中传递一个对象来获取数据。我在邮递员中放置了以下 URL 来执行结果。

http://my_url/match/?search={"front": {"id": "1000", manufacturer: "Test"}....}

但是,我不确定如何在symfony中使用CURL传递该对象

$url = "http://my_url/match?search=";

        $response = $this->httpClient->request('GET', $url, [
            'headers' => $this->shopAuth->setHeader(),
            'query' => [
                'search' => $objToPass
            ]
        ]);

我试图传递,但它的结果是这样的:query?search[front][id]=1000&search[front][manufacturer]=Test ........

谁能帮帮我?

php httpclient symfony5

评论

0赞 Antoniossss 9/18/2023
现在是一个纯文本,只需将该 JSON 解析为一个对象即可。search
2赞 Phil 9/18/2023
看起来查询参数需要 JSON。你有没有试过简单地使用?search'search' => json_encode($objToPass)

答:

0赞 Punit Gajjar 9/18/2023 #1

当您将数组作为“query”参数传递时,Symfony 的 HttpClient 会自动将其转换为带有嵌套键的查询参数。如果要将 JSON 对象作为 URL 中的查询参数发送,则需要手动将其编码为 JSON 字符串,然后在服务器端对其进行解码。

use Symfony\Component\HttpClient\HttpClient;

// Your JSON object to pass
$objToPass = [
    'front' => [
        'id' => '1000',
        'manufacturer' => 'Test'
    ],
    // Add more data here if needed
];

// Encode the object as a JSON string
$jsonString = json_encode($objToPass);

$url = "http://my_url/match?search=" . urlencode($jsonString);

$httpOptions = [
    'headers' => $this->shopAuth->setHeader(),
];

$response = HttpClient::create()->request('GET', $url, $httpOptions);

// Decode the JSON response from the server if needed
$data = json_decode($response->getContent(), true);

评论

1赞 Phil 9/18/2023
为什么要创建一个新的?OP 显然已经有一个可用的实例HttpClient$this->httpClient
0赞 Punit Gajjar 9/18/2023
@Phil,我明确表示这是一个参考。他需要做的就是使用 json_encode 对值进行编码
2赞 Phil 9/18/2023
我只是觉得很奇怪,你努力从 JSON 复制对象,但改变了 OP 代码的其他方面。人们会盲目地从 Stack Overflow 答案中复制/粘贴,而不了解他们可能做出的更改$objToPass