因此,我已经在这几天,我试图连接到我自己的网站通过winsock使用c++。通常情况下,我会通过谷歌找到我所需要的一切,但我似乎找不到答案。
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,但这现在不是一个选项。
发布于 2015-01-15 01:45:06
它不起作用的原因是您的MIME身体数据格式错误:
Content-Disposition头没有text属性。您需要将文本移动到MIME部件的主体,并且需要用空行分隔MIME部件的头和正文,类似于主HTTP消息的头和正文的分离。试一试:
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++,比如:
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年、2048和2049年以获得正式的MIME规范。
阅读W3C的HTML规范(HTML4和HTML5)以及RFC 2388,了解如何格式化multipart/form-data数据。
至于cookie,它们是在HTTP响应中发送给您的,然后在随后的请求中将它们发送回相同的服务器/路径。阅读RFC 6265的官方曲奇规范。
https://stackoverflow.com/questions/27955313
复制相似问题