{"title":"C++ 实现简单的 HTTP GET 请求函数,不依赖第三方库", "description":"本文将展示一个用 C++ 编写的简单 HTTP GET 请求函数,该函数不依赖任何第三方库,并详细解释每个步骤。", "keywords":"C++, HTTP, GET请求, 网络编程, 套接字, URL解析, 响应", "content":""#include \n#include \n#include \n#include <sys/socket.h>\n#include <arpa/inet.h>\n#include <netdb.h>\n\nstd::string httpGet(const std::string& url) {\n std::string host;\n std::string path;\n size_t hostEndPos = url.find("/");\n if (hostEndPos != std::string::npos) {\n host = url.substr(0, hostEndPos);\n path = url.substr(hostEndPos);\n } else {\n host = url;\n path = "/";\n }\n \n int sock = socket(AF_INET, SOCK_STREAM, 0);\n if (sock == -1) {\n std::cerr << "Failed to create socket." << std::endl;\n return "";\n }\n \n struct hostent* server = gethostbyname(host.c_str());\n if (server == nullptr) {\n std::cerr << "Failed to get host by name." << std::endl;\n close(sock);\n return "";\n }\n \n struct sockaddr_in serverAddress{};\n serverAddress.sin_family = AF_INET;\n serverAddress.sin_port = htons(80);\n memcpy(&serverAddress.sin_addr, server->h_addr, server->h_length);\n \n if (connect(sock, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) == -1) {\n std::cerr << "Failed to connect to server." << std::endl;\n close(sock);\n return "";\n }\n \n std::string request = "GET " + path + " HTTP/1.1\r\n"\n "Host: " + host + "\r\n"\n "Connection: close\r\n\r\n";\n if (send(sock, request.c_str(), request.length(), 0) == -1) {\n std::cerr << "Failed to send request." << std::endl;\n close(sock);\n return "";\n }\n \n std::string response;\n char buffer[1024];\n int bytesRead;\n while ((bytesRead = recv(sock, buffer, sizeof(buffer)-1, 0)) > 0) {\n buffer[bytesRead] = '\0';\n response += buffer;\n }\n \n close(sock);\n return response;\n}\n\nint main() {\n std::string url = "http://example.com";\n std::string response = httpGet(url);\n std::cout << "Response:\n" << response << std::endl;\n \n return 0;\n}\n"上述代码创建了一个httpGet函数,它接收一个URL作为参数,并返回HTTP GET请求的响应。主要步骤包括:\n\n1. 解析URL,提取主机名和路径。\n2. 创建一个套接字。\n3. 通过主机名获取服务器的IP地址。\n4. 使用获取的IP地址和端口号连接到服务器。\n5. 构建并发送HTTP GET请求。\n6. 接收服务器的响应,并将其存储在字符串中。\n7. 关闭套接字并返回响应。\n\n在主函数中,我们可以使用httpGet函数来发送HTTP GET请求并打印响应。\n\n"}

C++ 实现简单的 HTTP GET 请求函数,不依赖第三方库

原文地址: https://www.cveoy.top/t/topic/pnRP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录