使用Post请求调用Ogre时返回"No JSON provided"错误排查
问题排查与解决方案
核心问题分析
你遇到的"No json provided"错误,主要是因为请求数据的编码格式不符合Ogre接口预期,同时代码中存在一处语法错误。
具体修复步骤
1. 修正代码中的拼写错误
你的代码里有一行明显的拼写失误:
cucurl_execrl_setopt($ch, CURLOPT_STDERR, $streamVerboseHandle);
需改为:
curl_setopt($ch, CURLOPT_STDERR, $streamVerboseHandle);
这个错误会导致curl日志无法正常输出,还可能干扰请求的正常执行。
2. 调整POST数据的编码格式
当用CURLOPT_POSTFIELDS传递数组时,PHP curl默认会以multipart/form-data格式发送请求,但Ogre的convertJson接口更适配application/x-www-form-urlencoded表单格式或直接JSON请求体。
方案一:使用URL编码的表单数据
将数组转换为URL编码字符串后发送:
// 替换原CURLOPT_POSTFIELDS设置 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
方案二:直接发送JSON字符串(推荐)
跳过数组包装,直接传递GeoJSON字符串并设置正确请求头:
// 替换原params和POSTFIELDS相关代码 curl_setopt($ch, CURLOPT_POSTFIELDS, $geojson); // 添加Content-Type请求头 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
3. Postman请求的对应调整
用Postman测试时需匹配对应格式:
- 表单模式:选择
x-www-form-urlencoded,添加键json,值为完整GeoJSON字符串; - Raw模式:选择JSON类型,请求体直接填写GeoJSON内容(无需包裹
json键),同时确保Header中Content-Type设为application/json。
为什么在线工具可以正常工作?
Ogre在线工具的表单默认采用application/x-www-form-urlencoded格式提交数据,和你curl代码默认的multipart/form-data格式不同,因此接口能正确识别并处理请求。
内容的提问来源于stack exchange,提问作者xanabobana
相关产品推荐
相关产品推荐

