【发布时间】:2010-11-09 14:55:04
【问题描述】:
我想在win32平台上开发一个HTTP例子,是异步的。
我是win32编程新手,win32平台为HTTP发送和接收请求提供了哪些api和库?我正在使用带有 VS 2005 的 Windows XP。
如果有任何示例,请提供指向它的链接。
【问题讨论】:
标签: c++ windows http asynchronous windows-xp
我想在win32平台上开发一个HTTP例子,是异步的。
我是win32编程新手,win32平台为HTTP发送和接收请求提供了哪些api和库?我正在使用带有 VS 2005 的 Windows XP。
如果有任何示例,请提供指向它的链接。
【问题讨论】:
标签: c++ windows http asynchronous windows-xp
Window HTTP Services“为开发者提供一个 HTTP 客户端应用程序编程接口 (API),以通过 HTTP 协议向其他 HTTP 服务器发送请求。”
HTTP Server API“使应用程序能够在不使用 Microsoft Internet 信息服务器 (IIS) 的情况下通过 HTTP 进行通信”
【讨论】:
您可以使用 WinHTTP 库。 Here 是异步完成的示例。
【讨论】:
Boost Asio 是一个不错的同步/异步库,它拥有 HTTP 服务器/客户端所需的一切。它有一些关于 HTTP 服务器和相关客户端的广泛示例。现在,如果您通常是 C++ 新手,那么这个库可能有点神秘。如果您想要更多从头开始的方法,您可以随时查看 MSDN。
【讨论】:
一般来说,我会推荐一些跨平台的东西,比如 cURL、POCO、Qt 或 Asio(非常现代且不错)。但是,这里是一个使用 IXMLHTTPRequest 的 Windows 示例:
// TODO: error handling
#include <atlbase.h>
#include <msxml6.h>
HRESULT hr;
CComPtr<IXMLHTTPRequest> request;
hr = request.CoCreateInstance(CLSID_XMLHTTP60);
hr = request->open(
_bstr_t("GET"),
_bstr_t("https://www.google.com/images/srpr/logo11w.png"),
_variant_t(VARIANT_FALSE),
_variant_t(),
_variant_t());
hr = request->send(_variant_t());
// get status - 200 if succuss
long status;
hr = request->get_status(&status);
// load image data (if url points to an image)
VARIANT responseVariant;
hr = request->get_responseStream(&responseVariant);
IStream* stream = (IStream*)responseVariant.punkVal;
CImage image = new CImage();
image->Load(stream);
stream->Release();
【讨论】:
这是一个例子
https://github.com/pedro-vicente/lib_netsockets
一个用于 POSIX 和 Winsock 套接字的 C++ 轻型包装器
它使用 HTTP GET 从 Web 服务器检索文件,服务器和文件都是命令行参数。远程文件保存到本地副本。
【讨论】: