Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.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

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+中套接字的HTTP请求+; 我对用C++套接字(Linux)创建的HTTP请求有一个问题。我需要从API获取一些信息 #include <iostream> #include <ctype.h> #include <cstring> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <unistd.h> #include <sstream> #include <fstream> #include <string> using namespace std; int sock; struct sockaddr_in client; int PORT = 80; int main(int argc, char const *argv[]) { struct hostent * host = gethostbyname("api.themoviedb.org"); if ( (host == NULL) || (host->h_addr == NULL) ) { cout << "Error retrieving DNS information." << endl; exit(1); } bzero(&client, sizeof(client)); client.sin_family = AF_INET; client.sin_port = htons( PORT ); memcpy(&client.sin_addr, host->h_addr, host->h_length); sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { cout << "Error creating socket." << endl; exit(1); } if ( connect(sock, (struct sockaddr *)&client, sizeof(client)) < 0 ) { close(sock); cout << "Could not connect" << endl; exit(1); } stringstream ss; ss << "GET /3/movie/" << 550 << "?api_key=xxx HTTP/1.1\r\n" << "Host: api.themoviedb.org\r\n" << "Accept: application/json\r\n" << "\r\n\r\n"; string request = ss.str(); if (send(sock, request.c_str(), request.length(), 0) != (int)request.length()) { cout << "Error sending request." << endl; exit(1); } char cur; while ( read(sock, &cur, 1) > 0 ) { cout << cur; } return 0; } #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; int袜子; 客户端中的结构sockaddr_; int端口=80; int main(int argc,char const*argv[] { struct hostent*host=gethostbyname(“api.themoviedb.org”); 如果((主机==NULL)| |(主机->h_地址==NULL)){ cout h_长度); sock=socket(AF\u INET,sock\u STREAM,0); if(sock_C++_Sockets_Http - Fatal编程技术网 h_地址==NULL)){ cout h_长度); sock=socket(AF\u INET,sock\u STREAM,0); if(sock,c++,sockets,http,C++,Sockets,Http" /> h_地址==NULL)){ cout h_长度); sock=socket(AF\u INET,sock\u STREAM,0); if(sock,c++,sockets,http,C++,Sockets,Http" />

C+中套接字的HTTP请求+; 我对用C++套接字(Linux)创建的HTTP请求有一个问题。我需要从API获取一些信息 #include <iostream> #include <ctype.h> #include <cstring> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <unistd.h> #include <sstream> #include <fstream> #include <string> using namespace std; int sock; struct sockaddr_in client; int PORT = 80; int main(int argc, char const *argv[]) { struct hostent * host = gethostbyname("api.themoviedb.org"); if ( (host == NULL) || (host->h_addr == NULL) ) { cout << "Error retrieving DNS information." << endl; exit(1); } bzero(&client, sizeof(client)); client.sin_family = AF_INET; client.sin_port = htons( PORT ); memcpy(&client.sin_addr, host->h_addr, host->h_length); sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { cout << "Error creating socket." << endl; exit(1); } if ( connect(sock, (struct sockaddr *)&client, sizeof(client)) < 0 ) { close(sock); cout << "Could not connect" << endl; exit(1); } stringstream ss; ss << "GET /3/movie/" << 550 << "?api_key=xxx HTTP/1.1\r\n" << "Host: api.themoviedb.org\r\n" << "Accept: application/json\r\n" << "\r\n\r\n"; string request = ss.str(); if (send(sock, request.c_str(), request.length(), 0) != (int)request.length()) { cout << "Error sending request." << endl; exit(1); } char cur; while ( read(sock, &cur, 1) > 0 ) { cout << cur; } return 0; } #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; int袜子; 客户端中的结构sockaddr_; int端口=80; int main(int argc,char const*argv[] { struct hostent*host=gethostbyname(“api.themoviedb.org”); 如果((主机==NULL)| |(主机->h_地址==NULL)){ cout h_长度); sock=socket(AF\u INET,sock\u STREAM,0); if(sock

C+中套接字的HTTP请求+; 我对用C++套接字(Linux)创建的HTTP请求有一个问题。我需要从API获取一些信息 #include <iostream> #include <ctype.h> #include <cstring> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <unistd.h> #include <sstream> #include <fstream> #include <string> using namespace std; int sock; struct sockaddr_in client; int PORT = 80; int main(int argc, char const *argv[]) { struct hostent * host = gethostbyname("api.themoviedb.org"); if ( (host == NULL) || (host->h_addr == NULL) ) { cout << "Error retrieving DNS information." << endl; exit(1); } bzero(&client, sizeof(client)); client.sin_family = AF_INET; client.sin_port = htons( PORT ); memcpy(&client.sin_addr, host->h_addr, host->h_length); sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { cout << "Error creating socket." << endl; exit(1); } if ( connect(sock, (struct sockaddr *)&client, sizeof(client)) < 0 ) { close(sock); cout << "Could not connect" << endl; exit(1); } stringstream ss; ss << "GET /3/movie/" << 550 << "?api_key=xxx HTTP/1.1\r\n" << "Host: api.themoviedb.org\r\n" << "Accept: application/json\r\n" << "\r\n\r\n"; string request = ss.str(); if (send(sock, request.c_str(), request.length(), 0) != (int)request.length()) { cout << "Error sending request." << endl; exit(1); } char cur; while ( read(sock, &cur, 1) > 0 ) { cout << cur; } return 0; } #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; int袜子; 客户端中的结构sockaddr_; int端口=80; int main(int argc,char const*argv[] { struct hostent*host=gethostbyname(“api.themoviedb.org”); 如果((主机==NULL)| |(主机->h_地址==NULL)){ cout h_长度); sock=socket(AF\u INET,sock\u STREAM,0); if(sock,c++,sockets,http,C++,Sockets,Http,Web服务器可能正在保持连接打开,等待您的下一个HTTP请求,该请求将永远不会出现。服务器最终超时并关闭连接。您可以通过以下任一方式更改此行为: 请求服务器使用连接关闭连接:关闭请求中的头行 解析响应头以了解在获得响应结束后何时停止读取。有关如何检测响应结束的规则,请参阅 Web服务器可能正在保持连接打开,等待您的下一个HTTP请求,该请求将永远不会出现。服务器最终超时并关闭连接。您可以通过以下方式之一更改此行为: 请求服务器使用连接关闭连接:关闭请求中的头行 解析响应头以了解在获得响应结束后何

Web服务器可能正在保持连接打开,等待您的下一个HTTP请求,该请求将永远不会出现。服务器最终超时并关闭连接。您可以通过以下任一方式更改此行为:


  • 请求服务器使用
    连接关闭连接:关闭请求中的头行

  • 解析响应头以了解在获得响应结束后何时停止读取。有关如何检测响应结束的规则,请参阅


  • Web服务器可能正在保持连接打开,等待您的下一个HTTP请求,该请求将永远不会出现。服务器最终超时并关闭连接。您可以通过以下方式之一更改此行为:


  • 请求服务器使用
    连接关闭连接:关闭请求中的头行

  • 解析响应头以了解在获得响应结束后何时停止读取。有关如何检测响应结束的规则,请参阅


  • 您可以使用HTTP/1.0作为请求的版本,因为1.0版本决定服务器应在每次请求后关闭连接。

    您可以使用HTTP/1.0作为请求的版本,因为1.0版本决定服务器应在每次请求后关闭连接。

    使用库(对于HTTP客户端,可能是
    libcurl
    )。对于HTTP库服务器端,请参见。另外-如果您不重新使用连接,则发送的“\r\n”太多也不会影响您-但毫无价值。对于HTTP客户端,请使用库(可能是
    libcurl
    )。对于HTTP库服务器端,请参见。另外-您发送的“\r\n”太多-如果您不重复使用连接,则不会影响您-但没有任何价值。
    连接:关闭
    在这里起作用-但是如果客户端发送
    连接:关闭
    则强制关闭tcp连接,这只是一个令人讨厌的黑客行为。内容长度方法是最好的-但实际上libcurl在所有方面都会优于它。好的anks(1)帮了我…它起作用了,但我也会尝试第二个。我这样做是为了学习,我想通过套接字来尝试。但也非常感谢
    libcurl
    Content Length
    不是响应中唯一需要查找的内容。如果响应是分块的,则不会有任何
    Content Length
    标题(如果有,则必须忽略)HTTP 1.1规范要求客户端和服务器实现都必须识别并支持分块。
    Connection:close
    实现了这一点,但如果客户端发送
    Connection:close
    则要求关闭tcp连接。这只是一个令人讨厌的黑客行为。内容长度方法是最好的,但实际上是最好的I’我在各方面都很出色。好的,谢谢帮了我…它起作用了,但我也会尝试第二个。我这样做是为了学习,我想通过套接字来尝试。但也非常感谢
    libcurl
    Content Length
    不是响应中唯一需要查找的内容。如果响应是分块的,则不会有任何
    Content Length
    标题HTTP 1.1规范要求客户端和服务器实现必须识别并支持分块。
    cout << cur;
    
    cout << cur << endl;