C++调用 HTTP 实现方式
2011-09-24 17:00:52|分类:C++|字号订阅
Http 访问有两种方式,GET 和 POST,就编程来说 GET 方式相对简单点,它不用向服务
器提交数据,程序中使用 POST 方式,
提交数据并从服务器获取返回值。
为实现 Http 访问,微软提供了二套 API:WinINet, WinHTTP。WinHTTP 比 WinINet 更加
安全和健壮,可以这么认为 WinHTTP 是 WinINet 的升级版本。
程序中,通过一个宏的设置来决定是使用 WinHttp 还是 WinINet。
#define USE_WINHTTP //Comment this line to user wininet.
下面来说说实现 Http 访问的流程(两套 API 都一样的流程):
1, 首先我们打开一个 Session 获得一个 HINTERNET session 句柄;
2, 然后我们使用这个 session 句柄与服务器连接得到一个 HINTERNET connect 句柄;
3, 然后我们使用这个 connect 句柄来打开 Http 请求得到一个 HINTERNET request 句柄;
4, 这时我们就可以使用这个 request 句柄来发送数据与读取从服务器返回的数据;
5, 最后依次关闭 request,connect,session 句柄。
/***********************定义 HTTP 发送所用方法***********************************/
HINTERNET OpenSession(LPCWSTR userAgent = 0)
{
#ifdef USE_WINHTTP
return WinHttpOpen(userAgent, NULL, NULL, NULL, NULL);;
#else
return InternetOpen(userAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL,
NULL, 0);
#endif
}
HINTERNET Connect(HINTERNET hSession, LPCWSTR serverAddr, int portNo)
{
#ifdef USE_WINHTTP
return WinHttpConnect(hSession, serverAddr, (INTERNET_PORT) portNo, 0);
#else
return InternetConnect(hSession, serverAddr, portNo, NULL, NULL,
INTERNET_SERVICE_HTTP, 0, 0);