实现HTTP访问的流程包括以下几步:
1, 首先我们打开一个Session获得一个HINTERNET session句柄;
2, 然后我们使用这个session句柄与服务器连接得到一个HINTERNET connect句柄;
3, 然后我们使用这个connect句柄来打开Http请求得到一个HINTERNET request句柄;
4, 这时我们就可以使用这个request句柄来发送数据与读取从服务器返回的数据;
5, 最后依次关闭request,connect,session句柄。
微软提供了两套http访问的接口:WinHTTP和WinINet。WinHTTP比WinINet更加安全和健壮,可以认为WinHTTP是WinINet的升级版本。这两套API包含了很多相似的函数与宏定义,访问的流程也是完全类似的(上述5步)。本文主要通过WinHTTP实现post请求方法,严格按照上述5个步骤给大家进行讲解。
又由于我所接收到的数据是UTF8而不是ASCII码,因此一开始接收到的数据存在乱码。在下述代码中我会详细解释出现乱码的原因以及如何解决。
好,小二,上代码!
#include "stdafx.h"
#include "jsonparser.h"
#include <string>
#include <windows.h>
#include <winhttp.h>
#pragma comment(lib, "winhttp.lib")
int _tmain(int argc, _TCHAR* argv[])
{
HINTERNET hSession = NULL;
HINTERNET hConnect = NULL;
HINTERNET hRequest = NULL;
//1. 初始化一个WinHTTP-session句柄,参数1为此句柄的名称
hSession = WinHttpOpen(L"csdn@elaine_bao", NULL, NULL, NULL, NULL);
if (hSession == NULL) {
cout<<"Error:Open session failed: "<<GetLastError()<<endl;
return -1;
}
//2. 通过上述句柄连接到服务器,需要指定服务器IP和端口号。若连接成功,返回的hConnect句柄不为NULL
hConnect = WinHttpConnect(h