【问题标题】:Send data from local webpage to C program running locally将数据从本地网页发送到本地运行的 C 程序
【发布时间】:2012-09-24 18:06:50
【问题描述】:

我正在寻找最简单的代码(跨平台,但不一定是跨浏览器)发送数据从本地网页到 C(不是 C++) 应用程序在本地运行。基本上,我有一个带有表单的 HTML 页面,我想以最简单的方式将数据从该表单发送到另一个进程。 (我知道我可以相对轻松地从网页读取本地数据,尤其是现在使用 HTML5,但在 javascript 沙箱之外编写是一个谜。)

我知道浏览器出于安全考虑很难做到这一点,我不想让我的机器受到攻击,但也许我可以在 C 应用程序中运行一个非常简单的服务器来接收提交的数据。 .. 无论哪种方式,我都无法运行任何标准的网络服务器,所以我需要一个 C 库/应用程序来为我做这件事。

我查看了 .hta 文件(似乎只适用于 Windows)和一些 C Web 服务器(我发现的都是 *nix 特定的)。一个类似的问题是如何transfer of data from webpage to a server c program,除了用户允许使用Java和其他网络服务器平台(我必须使用C)。

更新:有前途的库:https://stackoverflow.com/questions/175507/c-c-web-server-library

【问题讨论】:

  • 嗨,帕特。我需要更多信息。你的网页是用什么写的? php?或者更简单的东西?
  • 更简单,只需 HTML 和 javascript。如果它使用 PHP(或任何其他网络语言),我需要一个(更)复杂的网络服务器。

标签: c windows web cross-platform ipc


【解决方案1】:

你考虑过 FastCGI 吗?我有一个用 C 语言编写的快速 CGI 库,可能会有所帮助。它仍然需要做很多工作,我不确定我是否想在生产环境中使用。

如果您发现任何错误或进行任何改进,请分享它们以帮助他人。

https://github.com/manvscode/shrewd-cgi

【讨论】:

  • 如果我错了,请原谅我,但(快速)CGI 不需要网络服务器吗?因为我没有其中之一。但我正在考虑将 Mongoose(一个小型​​的跨平台 C Web 服务器)嵌入到我的 C 应用程序中,作为一种可能的解决方案(如果我让它工作,我会在这里发布)。
【解决方案2】:

您可以用 C 编写一个非常简单的 Web 服务器,从中提供页面(避免安全问题),然后将表单发布到它。

【讨论】:

  • 也许可以用 C 编写一个非常简单的 Web 服务器,但我提出这个问题的动机也是为了获得一些指导。
  • 我认为你高估了它需要什么。根据您的需要,您可以跳过很多内容。如果您可以进行套接字编程,请考虑 1)在 127.0.0.1:80 上侦听连接(因此外部无法连接) 2)接受连接并读取数据 3a)如果它以 GET 开头,则发送 200 OK 并HTML 页面并关闭套接字。 3b)如果它以 POST 开头,跳到第一个空白行然后读取表单数据,然后发送 200 OK 和 HTML 页面并关闭套接字。您将有一些 HTTP 标头要发回,但实际上,周围有很多示例。
【解决方案3】:

如果你绑定到 c,你将不得不去底层处理所有关于 sockets 库的漂亮细节。 (人们用高级语言抽象它是有原因的)。使用服务器和客户端here 查看 C 中 RPC 的一些示例代码。如果您有能力绑定到 C,例如使用 Tcl,我将在 tcl 脚本中实现服务器并将您的 C 函数绑定为 Tcl 命令。这样你就可以将内容直接传递给你的 c 方法,同时避免编写所有的套接字代码低级。

【讨论】:

  • 据我所知,用 C 语言进行跨平台套接字编程很困难 (stackoverflow.com/a/169147/116891)。如果有库已经这样做了,我宁愿使用它们:-)
  • 大部分都是 C++,比如 ACE,但如果你只关心 Unix、Windows 和 OSX,你可以尝试使用 cygwin 将你的东西移植到 Windows 上。
  • 我目前正在调查github.com/valenok/mongoose(跨平台,C)...
【解决方案4】:

将所需数据从网络发送到系统的特定端口(例如端口 X)。然后使用以下命令在后台运行您的应用程序(例如 APP):

nc -l X | ./APP

当然你需要nc 包。

【讨论】:

  • 似乎 *nix 是先决条件,所以这行不通。因此问题上的“跨平台”和“Windows”标签。
猜你喜欢
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多