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

PHP初学者求教:如何将CURLOPT_URL固定NIK改为输入并展示数据

解决方案

1. 先做用户输入表单

先写一个简单的HTML表单,让用户能输入NIK并提交查询:

<form method="POST">
    <label for="nik">输入印尼身份证号(NIK):</label>
    <input type="text" id="nik" name="nik" placeholder="请输入16位数字" required>
    <button type="submit">查询</button>
</form>

2. 接收并验证用户输入

在PHP里获取用户提交的NIK,同时做基础格式验证(印尼身份证号通常是16位数字):

$nik = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $nik = trim($_POST['nik']);
    // 验证NIK必须是16位纯数字
    if (!preg_match('/^\d{16}$/', $nik)) {
        echo '<p style="color: red;">请输入有效的16位数字NIK!</p>';
        $nik = '';
    }
}

3. 修改CURL请求的动态URL

把原来固定的NIK参数换成用户输入的变量,用http_build_query构建参数,避免URL编码问题:

if (!empty($nik)) {
    $apiBaseUrl = 'https://indonesian-identification-card-ktp.p.rapidapi.com/api/check';
    // 动态构建查询参数
    $params = ['nik' => $nik];
    $fullApiUrl = $apiBaseUrl . '?' . http_build_query($params);

    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_URL => $fullApiUrl, // 使用动态生成的URL
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => [
            "X-RapidAPI-Host: indonesian-identification-card-ktp.p.rapidapi.com",
            "X-RapidAPI-Key: 你的真实API密钥" // 替换成你自己的RapidAPI密钥
        ],
    ]);

    $response = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);
}

4. 处理响应并展示数据

增加错误判断(CURL请求错误、JSON解析错误),然后把获取到的结构化数据展示出来:

// 接上面的CURL代码继续写
if ($err) {
    echo '<p style="color: red;">请求出错:' . $err . '</p>';
} else {
    $array_response = json_decode($response, true); // 转成关联数组更易处理
    if (json_last_error() !== JSON_ERROR_NONE) {
        echo '<p style="color: red;">API响应解析失败!</p>';
    } else {
        // 检查是否存在有效数据
        if (isset($array_response['results']['realtime_data']['data']['findNikSidalih'], $array_response['results']['parse_data'])) {
            $realTimeData = $array_response['results']['realtime_data']['data']['findNikSidalih'];
            $parseData = $array_response['results']['parse_data'];

            // 用表格展示数据,更清晰
            echo '<h3>查询结果</h3>';
            echo '<h4>解析信息</h4>';
            echo '<table border="1" cellpadding="6">';
            foreach ($parseData as $key => $value) {
                echo '<tr><td><strong>' . htmlspecialchars($key) . '</strong></td><td>' . htmlspecialchars($value) . '</td></tr>';
            }
            echo '</table>';

            echo '<h4>实时数据</h4>';
            echo '<table border="1" cellpadding="6">';
            foreach ($realTimeData as $key => $value) {
                echo '<tr><td><strong>' . htmlspecialchars($key) . '</strong></td><td>' . htmlspecialchars($value) . '</td></tr>';
            }
            echo '</table>';
        } else {
            echo '<p style="color: red;">未找到该NIK的有效数据,或API返回格式已变更</p>';
            // 调试时可以打开下面的代码查看原始响应
            // echo '<pre>' . htmlspecialchars($response) . '</pre>';
        }
    }
}

完整可运行代码

把表单和PHP逻辑整合到同一个文件(比如ktp_check.php):

<!DOCTYPE html>
<html>
<head>
    <title>印尼身份证查询</title>
</head>
<body>
    <h1>印尼身份证(NIK)查询工具</h1>

    <form method="POST">
        <label for="nik">输入16位NIK:</label>
        <input type="text" id="nik" name="nik" placeholder="例如: 1234567890123456" required>
        <button type="submit">查询</button>
    </form>

    <?php
    $nik = '';
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $nik = trim($_POST['nik']);
        if (!preg_match('/^\d{16}$/', $nik)) {
            echo '<p style="color: red;">错误:请输入有效的16位数字NIK!</p>';
            $nik = '';
        } else {
            $apiBaseUrl = 'https://indonesian-identification-card-ktp.p.rapidapi.com/api/check';
            $params = ['nik' => $nik];
            $fullApiUrl = $apiBaseUrl . '?' . http_build_query($params);

            $curl = curl_init();
            curl_setopt_array($curl, [
                CURLOPT_URL => $fullApiUrl,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "GET",
                CURLOPT_HTTPHEADER => [
                    "X-RapidAPI-Host: indonesian-identification-card-ktp.p.rapidapi.com",
                    "X-RapidAPI-Key: 你的真实API密钥"
                ],
            ]);

            $response = curl_exec($curl);
            $err = curl_error($curl);
            curl_close($curl);

            if ($err) {
                echo '<p style="color: red;">请求失败:' . $err . '</p>';
            } else {
                $array_response = json_decode($response, true);
                if (!$array_response) {
                    echo '<p style="color: red;">无法解析API响应,请检查API状态</p>';
                } else {
                    if (isset($array_response['results']['realtime_data']['data']['findNikSidalih'], $array_response['results']['parse_data'])) {
                        $realTimeData = $array_response['results']['realtime_data']['data']['findNikSidalih'];
                        $parseData = $array_response['results']['parse_data'];

                        echo '<div style="margin-top:20px; padding:15px; border:1px solid #ddd;">';
                        echo '<h3>查询成功</h3>';
                        
                        echo '<h4>基础信息</h4>';
                        echo '<table border="1" cellpadding="6">';
                        foreach ($parseData as $k => $v) {
                            echo '<tr><td><strong>' . htmlspecialchars($k) . '</strong></td><td>' . htmlspecialchars($v) . '</td></tr>';
                        }
                        echo '</table>';

                        echo '<h4>实时验证数据</h4>';
                        echo '<table border="1" cellpadding="6">';
                        foreach ($realTimeData as $k => $v) {
                            echo '<tr><td><strong>' . htmlspecialchars($k) . '</strong></td><td>' . htmlspecialchars($v) . '</td></tr>';
                        }
                        echo '</table>';
                        echo '</div>';
                    } else {
                        echo '<p style="color: red;">未找到该NIK的信息,或API返回格式已更新</p>';
                    }
                }
            }
        }
    }
    ?>
</body>
</html>

关键注意事项

  • 必须替换代码中的你的真实API密钥为你在RapidAPI平台获取的有效密钥,否则请求会被拒绝。
  • 用htmlspecialchars()处理输出内容,避免XSS攻击风险。
  • 如果API返回的数据结构发生变化,需要调整数组索引,可以通过打印原始响应(注释掉的echo '<pre>' . htmlspecialchars($response) . '</pre>')查看最新结构。

内容的提问来源于stack exchange,提问作者icah lilisy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:57:19