我正在尝试发送一个 POST 请求并接收一个 GET 响应作为返回。
这是我的代码:
#define IP "87.98.245.77"
#define Port 80
void getGETMessage(SOCKET s)
{
char *data = new char[2000];
recv(s, data, strlen(data), NULL);
int x = 3;
}
void SendPOSTMessage(SOCKET s)
{
string data = "POST /index.php?p=convert HTTP/1.1"
"Host: convert2mp3.netConnection: keep-alive"
"Content-Length: 80";
"Cache-Control: max-age=0"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
"Origin: http://convert2mp3.net"
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
"Content-Type: application/x-www-form-urlencoded"
"Referer: http://convert2mp3.net/index.php?p=home"
"Accept-Encoding: gzip,deflate,sdch"
"Accept-Language: he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2,fr;q=0.2";
if (send(s, data.c_str(), data.length(), NULL) < data.length())
{
cout << "Error : " << WSAGetLastError() << endl;
return ;
}
getGETMessage(s);
}
int main()
{
char *data = new char[200];
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr(IP); // IP
clientService.sin_port = htons(Port); // Port
iResult = connect(ConnectSocket, (SOCKADDR *)& clientService, sizeof(clientService));
if (iResult == SOCKET_ERROR)
{
cout << "Error" << endl;
return 0;
}
SendPOSTMessage(ConnectSocket);
cin.get();
cin.get();
}
出于某种原因,我没有得到任何返回......
我尝试获取该网站的 IP:
http://convert2mp3.net/index.php?p=home
并使用 cmd,它告诉我它是 http://87.98.245.77/
但它不是在我的浏览器中加载...也许这是我的错误?
谢谢!
最佳答案
您的数据无效。每个 HTTP header 都需要以\r\n 终止,并且在最后一行 header 之后还需要另一个 header 。您发送的 Content-length 为 80,但没有内容。
补充说明:
如果 send() 返回一个正整数,调用 WSAGetLastError() 是没有意义的。没有错误,所以你会得到什么是未定义的。你应该检查-1。实际上,除非您处于非阻塞模式,否则 send() 不会返回短计数。
NULL 不是 send() 或 recv() 的正确第四个参数,但 0 是。
没有“GET 响应”这样的东西。只有 HTTP 响应。
关于c++ - 如何发送 POST 请求并接收 GET 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23849302/