c++ - 如何在此页面中提交来自 c++
问题描述
我想创建一个在此页面中提交表单的空白:https ://fs9.formsite.com/9jr4Rm/x1ncox1ipr/
怎么做?
void sendForm(char *answer)
{
//??
}
你也可以这样做:https ://fs9.formsite.com/9jr4Rm/x1ncox1ipr/fill?1=hello
我不希望程序打开一个站点,只是为了发送数据。
解决方案
我不确定您打算实现什么,但这是我的猜测:您最简单的解决方案是使用 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。网络连接应该始终被认为是不可靠的,并且返回成功/错误代码很好。
推荐阅读
- flutter-layout - 如何将 Richtext 对齐到中心,因为它默认为左对齐
- laravel - 是否可以加密 .env 文件(在 Laravel 中)中的信息?
- visual-studio-code - 从 Windows 资源管理器拖动到 VSCode,以移动文件?
- firebase - 获取当前用户时未设置我的变量
- reactjs - 反应 - 在谷歌云存储上调整图像大小 - 使用存储桶时出错
- pylint - 运行pylint时如何默认运行pylintrc文件?
- javascript - 如何从 HTML 中停止“setInterval”
- javascript - 如何从 Firebase 云功能发送自定义响应?
- unity3d - Google XR 纸板插件中没有 3D 深度
- java - 如何检查字符串是否有一个点,但不是在前面或最后?