使用换行符从php发送json-ccurl请求



我正在尝试将CLI curl转换为php。我手动尝试过,尝试过使用脚本,尝试过搜索解决方案,我找不到任何有用的东西来发送json curl要求使用php包含换行符。

curl -X POST "https://url.com" -H "accept: application/json" -H "X-API-Key: API_KEY" -H "Content-Type: application/json" -d '{"key1": "value1", "key2": "value2", "description_key": "{n"inner_text_key1": "inner_text_value"n}" }'

因此,我有一个可以在CLI中正常工作的curl,与上面类似。请注意,该描述包含一个字符串,其格式就像json一样。这是正确的。

然而,每当我试图在php上添加换行符时,整个过程都会中断。我正在使用的api最终返回";无标题字符";在上

如何正确设置格式,使换行符随请求一起发送,而不是被解释为未转义字符?

如果我从请求中删除换行符,它将完美地发送。同样,从CLI执行此操作非常完美,只是无法使其与php和换行符一起工作。

问题并不在于php本身,它在没有php的情况下工作,更不用说php在下面了。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://url.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{"key1": "value1", "key2": "value2", "description_key": "{n"inner_text_key1": "inner_text_value"n}"}");
$headers = array();
$headers[] = 'Accept: application/json';
$headers[] = 'X-Api-Key: no';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
echo '<pre>';
var_dump($result);
echo '</pre>';

我尝试了所有建议,但都不起作用。甚至连编码和解码都没有。最后解决方法很简单。

最初我有:

curl_setopt($ch, CURLOPT_POSTFIELDS, "{"key1": "value1", "key2": "value2", "description_key": "{n"inner_text_key1": "inner_text_value"n}"}");

我只是把它改成

curl_setopt($ch, CURLOPT_POSTFIELDS, '{"key1": "value1", "key2": "value2", "description_key": "{n"inner_text_key1": "inner_text_value"n}"}');

所以我删除了";除了内部json";描述":区域,并在整个事件周围使用了一句话。突然线路中断工作,所有内容都提交正确。

看起来像是用json编码的json。

echo var_export(
json_decode(
'{"key1": "value1", "key2": "value2", "description_key": "{n"inner_text_key1": "inner_text_value"n}" }'
, true
), true
);
// array(
//     'key1'            => 'value1',
//     'key2'            => 'value2',
//     'description_key' => '{
// "inner_text_key1": "inner_text_value"
// }',
// )

Json对Json解码后的字符串进行description_key解码
所以您在字符串的来源上遇到了问题。

如果你不能改变,那么

  • json解码字符串
  • json解码description_key偏移
  • json再次对数组进行编码(一次(
  • 用在卷发上

编辑:

理解:数组中应为json。断线是个问题。

然后你可以解码,编码:

$jsonString = '{"key1": "value1", "key2": "value2", "description_key": "{n"inner_text_key1": "inner_text_value"n}" }';
$array = json_decode($jsonString, true);
// array (
//     'key1' => 'value1',
//     'key2' => 'value2',
//     'description_key' => '{"inner_text_key1":"inner_text_value"}',
// )
if ($array['description_key']
and is_string($array['description_key'])
) {
$array['description_key'] = json_decode($array['description_key'], true);
// array (
//     'key1' => 'value1',
//     'key2' => 'value2',
//     'description_key' => array (
//         'inner_text_key1' => 'inner_text_value',
//     ),
// )
// If you NEED it to be encoded in encoded json then:
$array['description_key'] = json_encode($array['description_key']);
// array (
//     'key1' => 'value1',
//     'key2' => 'value2',
//     'description_key' => '{"inner_text_key1":"inner_text_value"}',
// )
}
$jsonString = json_encode($array);
// '{"key1":"value1","key2":"value2","description_key":"{\"inner_text_key1\":\"inner_text_value\"}"}'

最新更新