Winsock2 登录表单 c++
Winsock2 login Form c++
所以我已经在这里呆了好几天,我试图使用 C++ 通过 Winsock 连接到我自己的网站。通常我通过谷歌找到我需要的一切,但我似乎无法弄清楚。
char *sendbuf = "POST / HTTP/1.1rn"
"Host: sn.theskatenetwork.comrn"
"Accept: text/html, application/xhtml+xmlrn"
"Content-Type: multipart/form-data; boundary=---------------------------7dd37b37e06e2rn"
"Content-Length: sizeofbodyrn"
"Accept-Encoding: gzip, deflatrn"
"Keep-Alive: 30rn"
"Connection: Keep-Alivern"
"rn"
"---------------------------7dd37b37e06e2rn"
"Content-Disposition: form-data; name="ID"; text="testing"rn"
"-----------------------------7dd37b37e06e2rn"
"---------------------------7dd37b37e06e2rn"
"Content-Disposition: form-data; name="Password"; text="testing"rn"
"-----------------------------7dd37b37e06e2rn"
"rn";
我不太确定我是否正确发送输入,因为我所看到的一切都只包括发送文件。我也不知道如何检查cookie以查看我是否已登录。我假设为了做到这一点,我必须再次发送作为获取,但这就是我所知道的。似乎大多数人只使用 vb 来编写 winsock,但现在这不是一个选择。
它不起作用的原因是您的 MIME 正文数据格式不正确:
-
您没有正确使用破折号作为每个 MIME 部分之间的边界。 如果你去掉(或至少减少)边界中的破折号,这更容易看到。
-
每个 MIME 部分中的文本值格式不正确。
Content-Disposition
标头没有text
属性。 您需要将文本移动到 MIME 部分的正文,并且需要用空行分隔 MIME 部件的标头和正文,类似于主 HTTP 消息的标头和正文的分离。
试试这个:
char *sendbuf = "POST / HTTP/1.1rn"
"Host: sn.theskatenetwork.comrn"
"Accept: text/html, application/xhtml+xmlrn"
"Content-Type: multipart/form-data; boundary=7dd37b37e06e2rn"
"Content-Length: 167rn"
"Accept-Encoding: gzip, deflatern"
"Keep-Alive: 30rn"
"Connection: Keep-Alivern"
"rn"
"--7dd37b37e06e2rn"
"Content-Disposition: form-data; name="ID"rn"
"rn"
"testingrn"
"--7dd37b37e06e2rn"
"Content-Disposition: form-data; name="Password"rn"
"rn"
"testingrn"
"--7dd37b37e06e2--rn";
或者更C++比如:
std::string host = "sn.theskatenetwork.com";
std::string boundary = "7dd37b37e06e2";
std::string id = "testing";
std::string psw = "testing";
std::ostringstream oss;
oss << "--" << boundary << "rn"
"Content-Disposition: form-data; name="ID"rn"
"rn"
<< id << "rn"
"--" << boundary << "rn"
"Content-Disposition: form-data; name="Password"rn"
"rn"
<< psw << "rn"
"--" << boundary << "--rn";
std::string senddata = oss.str();
oss.str("");
oss.clear();
oss << "POST / HTTP/1.1rn"
"Host: " << host << "rn"
"Accept: text/html, application/xhtml+xmlrn"
"Content-Type: multipart/form-data; boundary=" << boundary << "rn"
"Content-Length: " << senddata.size() << "rn"
"Accept-Encoding: gzip, deflatern"
"Keep-Alive: 30rn"
"Connection: Keep-Alivern"
"rn"
<< senddata;
std::string sendbuf = oss.str();
// use sendbuf.c_str() and sendbuf.size() as needed...
阅读 RFC 2045、2046、2047、2048 和 2049,了解官方 MIME 规范。
阅读 W3C 的 HTML 规范(HTML4 和 HTML5)以及 RFC 2388,了解如何格式化multipart/form-data
数据。
至于 cookie,它们以 HTTP 响应的形式发送给您,您在后续请求中将它们发送回同一服务器/路径。 阅读 RFC 6265 了解官方 cookie 规范。
相关文章:
- GTK 最大化表单 C++
- win 表单应用程序字符串^ 到 int
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 可以在JSON文件的帮助下在Qt中创建UI表单
- 表单未显示在凭据提供程序中
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何从 winapi 中的编辑表单获取文本?
- 在 cout 中将线条表单文件与自定义文本组合时出现问题
- 从 dll 调用 opencv 垫到 Windows 表单,图像出现故障
- 如何在不使用任何数据库的情况下制作动态注册表单?
- 家庭作业帮助 - 检查表单按钮上的数据
- C++ 在给定像素数据数组的表单上绘制矩形
- 复制初始化表单 '= {}'
- 如何创建第二个 QT .ui 表单
- 如何将变量从一个表单传递到另一个表单
- 如何从另一个Qt Widget表单类调用MainWindow类
- 在表单 QT 上的小部件内绘制
- 如何从QtQuickWidget加载qt快速UI表单
- 如何将变量从一个 qt 表单传递到另一个表单 qt 形式
- 为什么我的代码无法在二叉搜索树中正确执行预购表单?