在项目中使用以下引用头
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
可以使用wininet进行网络编程,
wininet进行http请求时候,当服务器端返回setcookie设置JSESSIONID就会自动设置该cookie,下载继续访问就会持续带有。验证例子如下。
#include <windows.h>
#include <wininet.h>
#include <stdio.h>
#pragma comment(lib, "wininet.lib")
HINTERNET hInternetOpen;
HINTERNET hInternetConnect;
HINTERNET hRequest;
DWORD dwSize = 1024;
//存放提取的cookie
LPVOID lpOutBuffer = new char[dwSize];
int TestWininet(LPCSTR lpszSerNam, INTERNET_PORT myPort, char* path, char* data)
{
bool flag;
LPVOID lpDataBuffer = new char[dwSize];
memset(lpDataBuffer, 0, dwSize);
//发包时需要的一个http头
static char hdrs[] = "Content-Type: application/x-www-form-urlencode";
//接受的文件类型,这里是全部
static LPCSTR accept[2] = {"*/*", NULL};
//打开一个链接
hInternetOpen = InternetOpenA("Test", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hInternetOpen == NULL)
{
printf("Internet open failed!\n");
return 0;
}
//链接到一个服务器
hInternetConnect = InternetConnectA(hInternetOpen, lpszSerNam, myPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if (hInternetConnect == NULL)
{
printf("Internet Connect failed!\n");
return 0;
}
//打开一个请求
hRequest = HttpOpenRequestA(hInternetConnect, "GET", path, NULL, NULL, accept, 0, 0);
if (hRequest == NULL)
{
printf("Internet Request failed!\n");
return 0;
}
//发送请求
flag = HttpSendRequestA(hRequest, hdrs, strlen(hdrs), data, strlen(data));
//读取返回的cookie
flag = HttpQueryInfoA(hRequest, HTTP_QUERY_SET_COOKIE, lpOutBuffer, &dwSize, NULL);
printf("%s\n", lpOutBuffer);
//读取放回的文本内容
InternetReadFile(hRequest, lpDataBuffer, 1024, &dwSize);
printf("%s\n", lpDataBuffer);
//关闭打开的句柄
InternetCloseHandle(hRequest);
InternetCloseHandle(hInternetConnect);
InternetCloseHandle(hInternetOpen);
return 0;
}
int InetKeepSessionIDExample()
{
int i;
//第一访问,获得sessionID
//http://192.168.10.215:8080/sys/SysUserAction_isLogin.do?name=superman&password=talent
TestWininet("192.168.10.215", 8080, "/sys/IPConfigAction_listLink.do", "yy");//第一次访问获取,第二次访问自然就带了,根本不用设置的。
TestWininet("192.168.10.215", 8080, "/sys/SysUserAction_isLogin.do?name=superman&password=talent", "yy");//可以看到第二次请求头cookie里面自然带有JSESSIONID
}