C++中的HTTP获取请求

yduiuuwa  于 2023-03-10  发布在  其他
关注(0)|答案(3)|浏览(256)

我需要发送一个HTTPGET请求到我的站点,然后获取页面的内容并解析它。我不喜欢使用像libCURL这样的库,因为我希望最终应用程序完全独立(这是引用个人经验,我可能是错的,但如果我记得客户端必须有某些动态链接库才能运行带有libCURL库的应用程序。),我在Visual Studio 2012中使用C++。
代码示例也会很好。

1zmg4dgp

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响应头进行响应,然后是数据(或错误描述)。

bbuxkriu

bbuxkriu2#

1.大多数库都可以静态编译。当你使用静态库时,它会链接到你的可执行文件中,你不必附带库的dll。也许这会有所帮助:Walkthrough: Creating and Using a Static Library (C++)
1.某些库可以是仅标头库,也可以在仅标头模式下使用:编译器将库拉入源代码。同样,不会为库生成dll。例如,您可以尝试使用getting Asiocpp-netlib,使其工作在只显示头文件的模式下。还有一个简单的http客户端示例,仅适用于位于某处的Asio。
1.我认为您可以使用WinINetWinHTTP,而不附带任何DLL。

oyxsuwqo

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

祝你好运!

相关问题