【问题标题】:How to call a function written in C with axios?如何用axios调用C语言编写的函数?
【发布时间】:2020-03-26 08:31:10
【问题描述】:

我使用微控制器开发嵌入式 Web 服务器,但我不确定是否可以将 Apache 或任何其他服务器下载到我的控制器中。

但是,我已经成功实现了一个 HTTP 接口,并且一直在嵌入式 Web 服务器端托管网页并处理和解析 POST 请求数据/有效负载。

当网页包含要提交的任何表单类型数据时,问题就出现了。

我收到用户在网页上输入的值,但我无法在嵌入式服务器发送的网页上正确显示数据。

这就是链接 C (freeRTOS) 代码(服务器端)和 JS(客户端)的主要问题所在。

如果我已经与网页建立了成功的 HTTP 连接并且我还能够托管上述页面,那么 JS Web 客户端如何从嵌入式 Web 服务器(在 freeRTOS 中)提取数据?

目前我正在使用 axios 但无法弄清楚如何在 URL 中调用 C 函数?因为没有函数就不可能在 C 中编写代码。

axios({
method: 'post',
url: 'getStatus.c',
data: sampleData,
headers: {'Content-Type': 'multipart/form-data' }
})
.then(function (response) {
    console.log(response);
})

【问题讨论】:

  • Axios 是一个 HTTP 客户端。您是否正在运行将调用该函数的服务器?
  • 它是 freeRTOS 中的嵌入式 Web 服务器

标签: javascript jquery c ajax axios


【解决方案1】:

您不能直接调用未编译的 C 源文件中的函数。

axios 是一种客户端(JS lib)技术。任何想要与 axios 交互的服务器端程序都必须实现某种 HTTP 接口。

如果你必须使用 C 来实现类似的东西:

  1. 在 C 中实现 CGI 接口

CGI 程序可以像这样简单(处理 POST 请求有点困难):

#include <stdio.h>

int main()
{
  printf("Content-type: text/html\n\n");
  printf("<html>\n");
  printf("<body>\n");
  printf("<h1>Hello there!</h1>\n");
  printf("</body>\n");
  printf("</html>\n");
  return 0;
}

您可以通过以下方式访问 POST 请求数据:

len_ = getenv("CONTENT_LENGTH");
len = strtol(len_, NULL, 10);
postdata = malloc(len + 1);
if (!postdata) { /* handle error or */ exit(EXIT_FAILURE); }
fgets(postdata, len + 1, stdin);
/* work with postdata */
free(postdata);

How to retrieve form "POST" data via cgi-bin program written in C

更多关于 CGI C 程序的信息:http://jkorpela.fi/forms/cgic.html

考虑将 libcgi http://libcgi.sourceforge.net 用于 CGI C 程序。

  1. 编译 CGI 程序。
  2. 使用 Apache2 或 Nginx 来提供 CGI“脚本”,在这种情况下是编译后的二进制文件。

如果使用 C 不是优先事项:

我建议使用更适合 Web 开发的高级语言。 Python / PHP / C# / Java / 等等。

【讨论】:

  • 尽管我已经阅读了有关 CGI、在线以及您提供的链接的信息,但我无法在 C 代码中找到 Apache 或 Nginx 服务器的相关性/用法。另外,我已经更新了问题以详细说明问题。
  • 嗯,我上面写的主要适用于运行linux/Windows的常规服务器。但是直接调用函数/文件并不常见,我只看到香草 PHP(没有 url 路由)做了类似的事情。请记住,PHP 是一种解释性语言,而 C 不是。大多数框架/语言都要求您实现一个处理 HTTP 路由并将 args 传递给该函数的包装函数。请提供getStatus.c源代码并命名使用的freertos http lib
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多