提问人:rubo77 提问时间:10/26/2023 最后编辑:rubo77 更新时间:10/27/2023 访问量:63
使用 PHP curl 发送 json 时防止双重编码
Prevent double-encoding when sending json with PHP curl
问:
当我通过以下方式发送我的 json 编码数组时
<?php
$data=array("Arzt"=>array("Kundennummer"=>"",
"Praxisname"=>"Praxis XY",
"Vorname"=>"Test",
"Nachname"=>"Test",
# ...
));
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Authorization: Basic MTIzMTIzMS1CbGltdXM6clVja20yaVJxT0V2Y1ZTAb1IQUI='));
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data));
$result = curl_exec($ch);
当 CURL 发送此消息时,它会到达编码如下的服务器(网络服务日志):
{"{\"Arzt\":{\"Kundennummer\":\"\",\"Praxisname\":\"Praxis XY\",\"Vorname\":\"Test\",\"Nachname\": .........
但预期的是:
{"Arzt":{"Kundennummer":"","Praxisname":"Praxis XY","Vorname":"Test","Nachname": ..........
如何防止 PHP curl 中 JSON 字符串的双重编码?
答:
1赞
rubo77
10/27/2023
#1
我打过电话
curl_setopt( $ch, CURLOPT_HTTPHEADER, array(...));
几次并认为,每个标头都被添加,但实际上只有最后一个标头被添加到调用中。
您必须将所有标头添加到一个数组中,并且仅将 curl_setopt 用于CURLOPT_HTTPHEADER一次。
在这种情况下,jon 标头被覆盖,因此接收端不理解数据是 JSON,而是将其解释为常规表单编码数据,这意味着它正在寻找值。因此,它为您提供整个 JSON 字符串作为空值对象中的键a=b
({"{…}": ""})
评论
0赞
ADyson
10/27/2023
对不起,没注意到你这样做了。很高兴你修好了它!
评论
json_encode($data)
json_encode($data)
a=b
{"{…}": ""}