Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 400使用winsock库发送GET http请求时出现错误请求_C++_Sockets_Http_Winsock - Fatal编程技术网

C++ 400使用winsock库发送GET http请求时出现错误请求

C++ 400使用winsock库发送GET http请求时出现错误请求,c++,sockets,http,winsock,C++,Sockets,Http,Winsock,我正在尝试向Web服务器发送GET请求(例如:www.coursera.org,…)。但是sServer返回一个响应头:HTTP/1.1400错误请求 我在C++中使用了Winsock,并建立了一个Socket连接到服务器。然后,向服务器发送GET请求 int main(void) { get_Website("www.coursera.org"); cout << website_HTML; cout << "\n\nPress ANY k

我正在尝试向Web服务器发送GET请求(例如:www.coursera.org,…)。但是sServer返回一个响应头:
HTTP/1.1400错误请求

<>我在C++中使用了Winsock,并建立了一个Socket连接到服务器。然后,向服务器发送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();

}
int main(无效){
获取大学网站(“www.coursera.org”);

他们无法解析您的请求,因为您试图将其未加密发送到https端口(443)。您可以尝试将其发送到http端口(80),但他们仍会将您重定向到。他们无法解析您的请求,因为您试图将其未加密发送到https端口(443)。您可以尝试将其发送到http端口(80),但它们会将您重定向到任何位置。

我发送到端口(80)并收到错误“301永久移动”。我认为当网站有http协议时使用端口80,当网站有https协议时使用端口443。是的,这是正确的。换句话说,他们告诉你他们不支持http,只支持https。所以,要使用他们,你需要在你的应用程序中支持https。是的。我刚刚意识到了这一点。当使用端口80时,http网站的代码是可以的。但是对于HTTPS,它不是!谢谢!我发送到端口(80)并收到错误“301永久移动”。我认为当网站有http协议时使用端口80,当网站有https协议时使用端口443。是的,这是正确的。换句话说,他们告诉你他们不支持http,只支持https。所以,要使用他们,你需要在你的应用程序中支持https。是的。我刚刚意识到了这一点。当使用端口80时,http网站的代码是可以的。但是对于HTTPS,它不是!谢谢!