在CodeIgniter框架中实现公网向私网POST JSON数据并获取返回响应的方法咨询
在CodeIgniter框架中实现公网向私网POST JSON数据并获取返回响应的方法咨询
没问题,我来帮你梳理下在CodeIgniter里实现这个需求的具体步骤,分公网发起请求和私网接收处理两部分来做:
一、公网端:构造CURL请求发起POST JSON
在你的公网项目RFQ控制器的rfq_compare_multi方法里,添加CURL逻辑(可以放在表单提交后的条件判断里):
public function rfq_compare_multi() { // 先处理你的表单提交逻辑,满足条件后执行以下请求代码 // 1. 准备要发送的JSON数据,根据实际业务构造 $send_data = [ 'rfq_id' => '123', 'compare_data' => ['item1', 'item2'], // 其他需要传递的字段 ]; $json_payload = json_encode($send_data); // 2. 私网接口地址 $private_api_url = 'http://192.168.132.12/rewamp/index.php/rfq/getPublicData'; // 3. 初始化并配置CURL $curl = curl_init($private_api_url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 把响应结果返回而不是直接输出 curl_setopt($curl, CURLOPT_POST, true); // 设置为POST请求 curl_setopt($curl, CURLOPT_POSTFIELDS, $json_payload); // 传入JSON数据 // 设置请求头,告诉服务器我们发送的是JSON格式 curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($json_payload) ]); // 如果公网是HTTPS,私网是HTTP,需要关闭SSL验证(测试环境用,生产环境建议配证书) curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 4. 执行请求并处理结果 $response = curl_exec($curl); $http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE); if (curl_errno($curl)) { // 请求出错,记录日志或者返回错误提示 $error_msg = curl_error($curl); log_message('error', '私网接口请求失败: ' . $error_msg); // 示例:返回给前端错误响应 echo json_encode(['status' => 'fail', 'msg' => '请求私网服务失败']); } else { // 请求成功,解析私网返回的JSON响应 $result = json_decode($response, true); // 根据业务需求处理结果,比如返回给前端或者入库 echo json_encode(['status' => 'success', 'data' => $result]); } // 关闭CURL资源 curl_close($curl); }
二、私网端:接收JSON数据并返回响应
在私网项目的RFQ控制器里创建getPublicData方法,用来接收公网发来的JSON并处理:
public function getPublicData() { // 注意:因为是POST的JSON数据,不是普通表单,所以不能用$this->input->post()获取 $raw_input = file_get_contents('php://input'); $received_data = json_decode($raw_input, true); // 验证数据有效性 if (!$received_data) { // 返回无效数据的响应 $this->output ->set_content_type('application/json') ->set_output(json_encode(['status' => 'error', 'msg' => '无效的JSON数据'])); return; } // 这里写你的业务逻辑,比如存储数据、计算处理等 // 示例:构造返回给公网的响应 $return_data = [ 'status' => 'success', 'msg' => '数据接收处理完成', 'processed_data' => $received_data // 可以返回处理后的结果 ]; // 返回JSON格式的响应 $this->output ->set_content_type('application/json') ->set_output(json_encode($return_data)); }
三、关键注意事项
- 网络连通性:公网服务器必须能访问到私网的
192.168.132.12,这是前提!如果公网服务器和私网不在同一内网,可能需要通过VPN、端口映射或者企业内部网络打通来实现访问。 - 安全加固:
- 测试环境关闭SSL验证没问题,但生产环境一定要配置合法的SSL证书,不要用
CURLOPT_SSL_VERIFYPEER=false,避免安全风险。 - 建议给私网接口加身份验证,比如在请求头里传递API密钥,私网端验证密钥合法性,防止非法请求。
- 测试环境关闭SSL验证没问题,但生产环境一定要配置合法的SSL证书,不要用
- CodeIgniter配置:确保私网项目的路由或
config.php配置正确,能正确路由到rfq/getPublicData方法。 - 日志排查:开启CodeIgniter的日志功能(在
config.php里设置$config['log_threshold']为1以上),方便排查请求失败的问题。
备注:内容来源于stack exchange,提问作者Sampathkumar
相关产品推荐
相关产品推荐

