我正在尝试发送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 的最后一行之后添加另一个。并且您发送的Content-length为80,但没有内容。

进一步说明:

  • 如果send()返回一个正整数,则调用WSAGetLastError()是没有意义的。没有错误,因此您将得到的结果是不确定的。您应该检查-1。实际上,除非您处于非阻塞模式,否则send()不会返回短计数。
  • NULL不是send()或recv()的正确第四个参数,但0是。
  • 没有“获取响应”之类的东西。只有HTTP响应。
  • 关于c++ - 如何发送POST请求和接收GET响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23849302/

    10-11 22:47
    查看更多