首页 > 解决方案 > 如何在此页面中提交来自 c++

问题描述

我想创建一个在此页面中提交表单的空白:https ://fs9.formsite.com/9jr4Rm/x1ncox1ipr/

怎么做?

void sendForm(char *answer)
{
    //??
}

你也可以这样做:https ://fs9.formsite.com/9jr4Rm/x1ncox1ipr/fill?1=hello

我不希望程序打开一个站点,只是为了发送数据。

标签: c++forms

解决方案


我不确定您打算实现什么,但这是我的猜测:您最简单的解决方案是使用 libcurl(适用于各种操作系统):文档在此处:https ://curl.haxx.se/libcurl/c / 或者,如果您更喜欢示例(我愿意),这是一个使用 http 在远程服务器上发布一些内容的简单示例: https ://curl.haxx.se/libcurl/c/http-post.html

如果您想使用 GET(如 ?1=hello 参数),您可以尝试不使用 CURLOPT_POSTFIELDS 行。只需使用:

curl_easy_setopt(curl, CURLOPT_URL, " https://fs9.formsite.com/9jr4Rm/x1ncox1ipr/fill?1=hello ");

如果您不能(或不想)使用 curl,则可以通过简单的套接字连接实现 HTTP。我在arduino上做过,没问题。连接到 fs9.formsite.com 的 TCP 端口 80(默认),发送:

GET /9jr4Rm/x1ncox1ipr/fill?1=hello HTTP/1.1\r\n
Host: fs9.formsite.com\r\n
Connection: close\r\n
\r\n

(其中 \r\n 是 DOS 风格的行尾,但大多数时候 \n 工作正常)

你可以告诉我们更多关于你希望它运行的系统以获得更好的响应(例如操作系统,也许编译器名称会很好)。

编辑:我已经修改了上面的 curl 示例。这里是:

#include <stdio.h>
#include <curl/curl.h>

CURL *curl;
CURLcode res;

void sendForm(const char *answer)
{
  curl = curl_easy_init();
  if(curl)
  {
    curl_easy_setopt(curl, CURLOPT_URL, answer);

    res = curl_easy_perform(curl);
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
    curl_easy_cleanup(curl);
  }
  else
  {
    fprintf(stderr, "curl is NULL\n");
  }
}

int main(void)
{
  curl_global_init(CURL_GLOBAL_ALL);
  sendForm("https://fs9.formsite.com/9jr4Rm/x1ncox1ipr/fill?1=hello");
  curl_global_cleanup();
  return 0;
}

然后你可以用你使用的任何东西编译它。我在 Linux 上使用 gcc:

gcc curltest.c -l curl -o curltest

然后运行:

./curltest

还有一个建议:不要对这种返回类型使用 void。网络连接应该始终被认为是不可靠的,并且返回成功/错误代码很好。


推荐阅读