使用WinInet访问没有证书的Https (GETPOST)

    技术2026-03-30  8

    #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数据的,主要修改代码如下

     

    view plain copy to clipboard print ? #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;   }  
    最新回复(0)