我正在尝试将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\"}"}'