You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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密钥,私网端验证密钥合法性,防止非法请求。
  • CodeIgniter配置:确保私网项目的路由或config.php配置正确,能正确路由到rfq/getPublicData方法。
  • 日志排查:开启CodeIgniter的日志功能(在config.php里设置$config['log_threshold']为1以上),方便排查请求失败的问题。

备注:内容来源于stack exchange,提问作者Sampathkumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:28:12