使用 cURL 和 C API 通过 http 提取动态数据的值

Extract value of a dynamic data through http using cURL and C API

我正在尝试提取网络中 Wifi 接入点的 RSSI 值。唯一可用的解决方案是使用其 ip 地址连接它并尝试读取其状态页面中的值。 在研究过程中,我找到了 cURL 库,并编写了一些代码来连接和提取状态页面。但是我只有页面的代码,并没有我需要获取的值。

所以,我需要你的帮助来找到提取数据价值的正确方法。

我的配置:Linux Ubuntu 目前,但是 SW 将在类似树莓派的界面 Eclipse CDT 中使用。

我写的代码:

CURL *curl;
CURLcode res;

curl = curl_easy_init();
if (curl)
{
    curl_easy_setopt(curl, CURLOPT_USERPWD, "admin:password");
    curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.5.179");
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

    res = curl_easy_perform(curl);
    /* Check for errors */
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));

    /* always cleanup */
    curl_easy_cleanup(curl);

}

我需要读取的数据(wlan1_signal):

Signal Strength:</td>

                                            <td >

                                                <div class="style2">

                                                    &nbsp;<span id="wlan1_signal">None</span>&nbsp;</div>

                                            </td>

感谢您的帮助。

编辑: 在页面的html代码中,我发现执行了一个脚本来生成动态值:

<script language="javascript" src="js/status.js" type="text/javascript"></script>

在此脚本 (http://192.168.5.179/en/js/status.js) 中,我找到了生成 RSSI 值的代码行:

remote_call("get_wifi_info", wlan_devs[index].cdev, 
                function(data){ ...
$("#wlan"+index+"_signal").html(get_regex(data, /Link Quality=(\S+)/));
...

但我的问题还是一样:如何读取生成的值??

如果您只需要检索值,而不考虑性能,您可以使用 bash 命令。

curl -s -u admin:password "http://192.168.5.179" | grep -Po '(?<=<span id="wlan1_signal">)[^<]+'