首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winsock2登录表单c++

Winsock2登录表单c++
EN

Stack Overflow用户
提问于 2015-01-15 01:12:58
回答 1查看 159关注 0票数 0

因此,我已经在这几天,我试图连接到我自己的网站通过winsock使用c++。通常情况下,我会通过谷歌找到我所需要的一切,但我似乎找不到答案。

代码语言:javascript
复制
char *sendbuf = "POST / HTTP/1.1\r\n"
    "Host: sn.theskatenetwork.com\r\n"
    "Accept: text/html, application/xhtml+xml\r\n"
    "Content-Type: multipart/form-data; boundary=---------------------------7dd37b37e06e2\r\n"
    "Content-Length: sizeofbody\r\n"
    "Accept-Encoding: gzip, deflat\r\n"
    "Keep-Alive: 30\r\n"
    "Connection: Keep-Alive\r\n"
    "\r\n"
    "---------------------------7dd37b37e06e2\r\n"
    "Content-Disposition: form-data; name=\"ID\"; text=\"testing\"\r\n"
    "-----------------------------7dd37b37e06e2\r\n"
    "---------------------------7dd37b37e06e2\r\n"
    "Content-Disposition: form-data; name=\"Password\"; text=\"testing\"\r\n"
    "-----------------------------7dd37b37e06e2\r\n"
    "\r\n";

我不太确定我是否发送输入的权利,因为我看到的一切只包括发送文件。我也不知道如何检查cookie,以确定是否已登录。我认为要做到这一点,我必须再次发送作为一个get,但这是我所知道的全部。似乎大多数人只使用vb编写winsock,但这现在不是一个选项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-15 01:45:06

它不起作用的原因是您的MIME身体数据格式错误:

  1. 对于每个MIME部件之间的边界,您没有正确地使用破折号。如果您去掉(或至少减少)边界中的破折号,这将更容易看到。
  2. 每个MIME部件中的文本值没有正确格式化。Content-Disposition头没有text属性。您需要将文本移动到MIME部件的主体,并且需要用空行分隔MIME部件的头和正文,类似于主HTTP消息的头和正文的分离。

试一试:

代码语言:javascript
复制
char *sendbuf = "POST / HTTP/1.1\r\n"
    "Host: sn.theskatenetwork.com\r\n"
    "Accept: text/html, application/xhtml+xml\r\n"
    "Content-Type: multipart/form-data; boundary=7dd37b37e06e2\r\n"
    "Content-Length: 167\r\n"
    "Accept-Encoding: gzip, deflate\r\n"
    "Keep-Alive: 30\r\n"
    "Connection: Keep-Alive\r\n"
    "\r\n"
    "--7dd37b37e06e2\r\n"
    "Content-Disposition: form-data; name=\"ID\"\r\n"
    "\r\n"
    "testing\r\n"
    "--7dd37b37e06e2\r\n"
    "Content-Disposition: form-data; name=\"Password\"\r\n"
    "\r\n"
    "testing\r\n"
    "--7dd37b37e06e2--\r\n";

或者更多的C++,比如:

代码语言:javascript
复制
std::string host = "sn.theskatenetwork.com";
std::string boundary = "7dd37b37e06e2";
std::string id = "testing";
std::string psw = "testing";

std::ostringstream oss;
oss << "--" << boundary << "\r\n"
       "Content-Disposition: form-data; name=\"ID\"\r\n"
       "\r\n"
       << id << "\r\n"
       "--" << boundary << "\r\n"
       "Content-Disposition: form-data; name=\"Password\"\r\n"
       "\r\n"
       << psw << "\r\n"
       "--" << boundary << "--\r\n";

std::string senddata = oss.str();

oss.str("");
oss.clear();

oss << "POST / HTTP/1.1\r\n"
       "Host: " << host << "\r\n"
       "Accept: text/html, application/xhtml+xml\r\n"
       "Content-Type: multipart/form-data; boundary=" << boundary << "\r\n"
       "Content-Length: " << senddata.size() << "\r\n"
       "Accept-Encoding: gzip, deflate\r\n"
       "Keep-Alive: 30\r\n"
       "Connection: Keep-Alive\r\n"
       "\r\n"
       << senddata;

std::string sendbuf = oss.str();

// use sendbuf.c_str() and sendbuf.size() as needed...

阅读RFCs 2045年二零四六2047年20482049年以获得正式的MIME规范。

阅读W3C的HTML规范(HTML4HTML5)以及RFC 2388,了解如何格式化multipart/form-data数据。

至于cookie,它们是在HTTP响应中发送给您的,然后在随后的请求中将它们发送回相同的服务器/路径。阅读RFC 6265的官方曲奇规范。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27955313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档