我需要发送一个HTTPGET请求到我的站点,然后获取页面的内容并解析它。我不喜欢使用像libCURL这样的库,因为我希望最终应用程序完全独立(这是引用个人经验,我可能是错的,但如果我记得客户端必须有某些动态链接库才能运行带有libCURL库的应用程序。),我在Visual Studio 2012中使用C++。代码示例也会很好。
1zmg4dgp1#
当你不想使用外部库时,你必须自己实现HTTP;当你只需要基本功能(直接下载文件,没有重定向,没有代理,没有cookie,没有认证,没有加密,没有压缩,没有其他恶作剧)时,这并不难。创建一个套接字,将其连接到Web服务器的端口80,然后将以下字符串发送到服务器:
"GET /example.html HTTP/1.1\r\n" "Host: www.example.com\r\n" "\r\n"
这将从www.example.com/example.html您连接到的服务器请求文件www.example.com。服务器将使用自己的HTTP响应头进行响应,然后是数据(或错误描述)。
bbuxkriu2#
1.大多数库都可以静态编译。当你使用静态库时,它会链接到你的可执行文件中,你不必附带库的dll。也许这会有所帮助:Walkthrough: Creating and Using a Static Library (C++)1.某些库可以是仅标头库,也可以在仅标头模式下使用:编译器将库拉入源代码。同样,不会为库生成dll。例如,您可以尝试使用getting Asio和cpp-netlib,使其工作在只显示头文件的模式下。还有一个简单的http客户端示例,仅适用于位于某处的Asio。1.我认为您可以使用WinINet或WinHTTP,而不附带任何DLL。
oyxsuwqo3#
下面是一个简单的C++ GET请求代码
std::string GET(std::string url) { std::string cmd = "curl -s " + url; FILE *p = popen(cmd.c_str(), "r"); char buffer[2]; std::string body; if (!p) { return "Error"; } while (fgets(buffer, sizeof(buffer), p)) { body += buffer; } return body; }
使用:
std::string response = GET("https://example.com"); // Do actions with response
祝你好运!
3条答案
按热度按时间1zmg4dgp1#
当你不想使用外部库时,你必须自己实现HTTP;当你只需要基本功能(直接下载文件,没有重定向,没有代理,没有cookie,没有认证,没有加密,没有压缩,没有其他恶作剧)时,这并不难。
创建一个套接字,将其连接到Web服务器的端口80,然后将以下字符串发送到服务器:
这将从www.example.com/example.html您连接到的服务器请求文件www.example.com。
服务器将使用自己的HTTP响应头进行响应,然后是数据(或错误描述)。
bbuxkriu2#
1.大多数库都可以静态编译。当你使用静态库时,它会链接到你的可执行文件中,你不必附带库的dll。也许这会有所帮助:Walkthrough: Creating and Using a Static Library (C++)
1.某些库可以是仅标头库,也可以在仅标头模式下使用:编译器将库拉入源代码。同样,不会为库生成dll。例如,您可以尝试使用getting Asio和cpp-netlib,使其工作在只显示头文件的模式下。还有一个简单的http客户端示例,仅适用于位于某处的Asio。
1.我认为您可以使用WinINet或WinHTTP,而不附带任何DLL。
oyxsuwqo3#
下面是一个简单的C++ GET请求代码
使用:
祝你好运!