提问人:nas 提问时间:9/18/2023 最后编辑:Philnas 更新时间:9/21/2023 访问量:78
如何在http客户端GET方法中传递对象?[复制]
How to pass object in http client GET method? [duplicate]
问:
我需要在 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 ........
谁能帮帮我?
答:
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
评论
search
search
'search' => json_encode($objToPass)