使用WinInet访问没有证书的Https (GET/POST)

来源:互联网 发布:java常用工具 编辑:程序博客网 时间:2024/04/30 20:40
#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; //无登录用户名 452860876     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;   }  


0 0
原创粉丝点击