gpt4 book ai didi

c++ - 使用 winsock 库发送 GET http 请求时出现 400 bad request 错误

转载 作者:行者123 更新时间:2023-11-28 01:25:23 26 4
gpt4 key购买 nike

我正在尝试向网络服务器发送 GET 请求(例如:www.coursera.org,...)。但是 sServer 返回一个响应头:HTTP/1.1 400 bad request

我在 C++ 中使用 Winsock 并建立一个套接字连接到服务器。然后,向服务器发送 GET 请求。

int main(void) {

get_Website("www.coursera.org");

cout << website_HTML;

cout << "\n\nPress ANY key to close.\n\n";
cin.ignore(); cin.get();


return 0;
}


void get_Website(string url)
{

WSADATA wsaData;
SOCKET Socket;
SOCKADDR_IN SockAddr;
int lineCount = 0;
int rowCount = 0;
struct hostent* localHost;
string srequete;
char* localIP;


srequete = "GET / HTTP/1.0\r\n";
srequete += "Host: www.coursera.org\r\n";
srequete += "Connection: close\r\n\r\n";

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
cout << "WSAStartup failed.\n";
system("pause");
//return 1;
}

Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
localHost = gethostbyname(url.c_str());
localIP = inet_ntoa(*(struct in_addr *)*localHost->h_addr_list);
SockAddr.sin_port = htons(443);
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = inet_addr(localIP);

if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0) {
cout << "Could not connect";
system("pause");
//return 1;
}
send(Socket, srequete.c_str(), strlen(srequete.c_str()), 0);

int nDataLength;
while ((nDataLength = recv(Socket, buffer, 10000, 0)) > 0) {
int i = 0;
while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
website_HTML += buffer[i];
i += 1;
}
}

closesocket(Socket);
WSACleanup();

}

问题好像是GET请求出错了?

最佳答案

他们无法解析您的请求,因为您正试图将其发送到未加密的 https 端口 (443)。您可以尝试向它发送 http 端口 (80),但它们会将您重定向到 https://coursera.org无论如何。

关于c++ - 使用 winsock 库发送 GET http 请求时出现 400 bad request 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54071830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com