#include <Windows.h> #include <Wininet.h> #include <stdio.h> #pragma comment(lib,"wininet.lib") #define TRANSFER_SIZE 1024 int main() { int nRet = 1; LPCTSTR lpszAgent = "WinInetGet/0.1"; HINTERNET hInternet = InternetOpen(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if( ! hInternet ) { return 1; } LPCTSTR lpszServerName = "192.168.22.199"; //设置server INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTPS_PORT; // HTTPS端口443 LPCTSTR lpszUserName = NULL; //无登录用户名 LPCTSTR lpszPassword = NULL; //无登录密码 DWORD dwConnectFlags = 0; DWORD dwConnectContext = 0; HINTERNET hConnect = InternetConnect(hInternet, lpszServerName, nServerPort, lpszUserName, lpszPassword, INTERNET_SERVICE_HTTP, dwConnectFlags, dwConnectContext); if( ! hConnect ) { return 1; } LPCTSTR lpszVerb = "GET"; LPCTSTR lpszObjectName = "/"; LPCTSTR lpszVersion = NULL; // 默认. LPCTSTR lpszReferrer = NULL; // 没有引用页 LPCTSTR *lplpszAcceptTypes = NULL; // Accpet所有类型. DWORD dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_AUTH | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI | //设置启用HTTPS INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID| INTERNET_FLAG_RELOAD; DWORD dwOpenRequestContext = 0; //初始化Request HINTERNET hRequest = HttpOpenRequest(hConnect, lpszVerb, lpszObjectName, lpszVersion, lpszReferrer, lplpszAcceptTypes, dwOpenRequestFlags, dwOpenRequestContext); if( ! hRequest ) { goto GOTO_EXIT; } //发送Request BOOL bResult = HttpSendRequest(hRequest, NULL, 0, NULL, 0); if ( ! bResult && GetLastError() == ERROR_INTERNET_INVALID_CA ) { DWORD dwFlags; DWORD dwBuffLen = sizeof(dwFlags); InternetQueryOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwFlags, &dwBuffLen); dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA; InternetSetOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof (dwFlags) ); bResult = HttpSendRequest(hRequest, NULL, 0, NULL, 0); } if( ! bResult ) { goto GOTO_EXIT; } //获得HTTP Response Header信息 char szBuff[TRANSFER_SIZE]; DWORD dwReadSize = TRANSFER_SIZE; bResult = HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, szBuff, &dwReadSize, NULL); if( ! bResult ) { goto GOTO_EXIT; } szBuff[dwReadSize] = '/0'; printf("%s/n", szBuff); //HTTP Response 的 Body DWORD dwBytesAvailable; bResult = InternetQueryDataAvailable(hRequest, &dwBytesAvailable, 0, 0); if( ! bResult ) { goto GOTO_EXIT; } if( dwBytesAvailable > TRANSFER_SIZE ) { printf("tool long %d /b", GetLastError(), dwBytesAvailable); goto GOTO_EXIT; } DWORD dwBytesRead; bResult = InternetReadFile(hRequest, szBuff, dwBytesAvailable, &dwBytesRead); if( ! bResult ) { goto GOTO_EXIT; } szBuff[dwBytesRead] = '/0'; printf("%s/n", szBuff); nRet = 0; GOTO_EXIT: if( hRequest ) { InternetCloseHandle(hRequest); } if( hConnect ) { InternetCloseHandle(hConnect); } if( hInternet ) { InternetCloseHandle(hInternet); } return nRet; } 上面是GET数据的,下面是POST数据的,主要修改代码如下 #include <Windows.h> #include <Wininet.h> #include <stdio.h> #pragma comment(lib,"wininet.lib") #define TRANSFER_SIZE 1024 int main() { int nRet = 1; LPCTSTR lpszAgent = "WinInetGet/0.1"; HINTERNET hInternet = InternetOpen(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if( ! hInternet ) { return 1; } LPCTSTR lpszServerName = "192.168.22.199"; //设置server INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTPS_PORT; // HTTPS端口443 LPCTSTR lpszUserName = NULL; //无登录用户名 LPCTSTR lpszPassword = NULL; //无登录密码 DWORD dwConnectFlags = 0; DWORD dwConnectContext = 0; HINTERNET hConnect = InternetConnect(hInternet, lpszServerName, nServerPort, lpszUserName, lpszPassword, INTERNET_SERVICE_HTTP, dwConnectFlags, dwConnectContext); if( ! hConnect ) { return 1; } LPCTSTR lpszVerb = "POST"; LPCTSTR lpszObjectName = "/vpn/userlogin.php"; LPCTSTR lpszVersion = NULL; // 默认. LPCTSTR lpszReferrer = NULL; // 没有引用页 LPCTSTR *lplpszAcceptTypes = NULL; // Accpet所有类型. DWORD dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_AUTH | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI | //设置启用HTTPS INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID| INTERNET_FLAG_RELOAD; DWORD dwOpenRequestContext = 0; //初始化Request HINTERNET hRequest = HttpOpenRequest(hConnect, lpszVerb, lpszObjectName, lpszVersion, lpszReferrer, lplpszAcceptTypes, dwOpenRequestFlags, dwOpenRequestContext); if( ! hRequest ) { goto GOTO_EXIT; } bool bResult = false; char szHeaderBuff[TRANSFER_SIZE] = {'/0'}; int nHeaderSize = sprintf(szHeaderBuff, "%s", "Content-Type:application/x-www-form-urlencoded"); char szReqBuff[TRANSFER_SIZE] = {'/0'}; int nReqSize = sprintf(szReqBuff, "user=%s&pass=%s", "test", "test"); //发送Request bResult = HttpSendRequest(hRequest, szHeaderBuff, nHeaderSize, szReqBuff, nReqSize); if ( ! bResult && GetLastError() == ERROR_INTERNET_INVALID_CA ) { DWORD dwFlags; DWORD dwBuffLen = sizeof(dwFlags); InternetQueryOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwFlags, &dwBuffLen); dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA; InternetSetOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof (dwFlags) ); bResult = HttpSendRequest(hRequest, szHeaderBuff, nHeaderSize, szReqBuff, nReqSize); } if( ! bResult ) { DWORD dwError = GetLastError(); printf("%d/n", dwError); goto GOTO_EXIT; } //获得HTTP Response Header信息 char szBuff[TRANSFER_SIZE]; DWORD dwReadSize = TRANSFER_SIZE; bResult = HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, szBuff, &dwReadSize, NULL); if( ! bResult ) { goto GOTO_EXIT; } szBuff[dwReadSize] = '/0'; printf("%s/n", szBuff); //HTTP Response 的 Body DWORD dwBytesAvailable; bResult = InternetQueryDataAvailable(hRequest, &dwBytesAvailable, 0, 0); if( ! bResult ) { goto GOTO_EXIT; } if( dwBytesAvailable > TRANSFER_SIZE ) { printf("tool long %d /n", GetLastError(), dwBytesAvailable); goto GOTO_EXIT; } DWORD dwBytesRead; bResult = InternetReadFile(hRequest, szBuff, dwBytesAvailable, &dwBytesRead); if( ! bResult ) { goto GOTO_EXIT; } szBuff[dwBytesRead] = '/0'; printf("%s/n", szBuff); nRet = 0; GOTO_EXIT: if( hRequest ) { InternetCloseHandle(hRequest); } if( hConnect ) { InternetCloseHandle(hConnect); } if( hInternet ) { InternetCloseHandle(hInternet); } return nRet; }