使用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
- 使用WinInet访问没有证书的Https (GET/POST)
- 使用WinInet访问没有证书的Https (GET/POST)
- 使用WinInet访问没有证书的Https (GET/POST)
- 使用WinInet访问没有证书的Https (GET/POST)
- HTTP(GET和POST访问URL) -- wininet
- Windows平台利用wininet做的HTTP的GET和POST,支持HTTPS
- JAVA实现http/https的Post、Get、代理访问请求
- php https的GET POST
- 用Wininet以Https的post方式登录
- 用WinInet POST/GET数据
- rails 如何使用https get post json 运用的办法
- AFNetworking2安全的使用自签证书访问HTTPS
- AFNetworking2安全的使用自签证书访问HTTPS
- Android使用OkHttp访问自签名证书的Https接口
- java https post (带证书的)
- CURL使用SSL证书访问HTTPS
- CURL使用SSL证书访问HTTPS
- CURL使用SSL证书访问HTTPS
- Okhttp, Retrofit, android-async-http, Volley用哪个好
- Kylin的RESTful API使用
- 粗浅看 JSP工作原理
- SpringMVC返回json数据的三种方式
- 谷歌开发者大会传达的8条关键信息
- 使用WinInet访问没有证书的Https (GET/POST)
- spring mvc常用的注解
- 冒泡排序
- Measure of similarity
- Android高德地图使用
- 沉浸式状态栏颜色设置,对android4.4~6.0的总结
- 讯飞语音听写开发入门之获取appid号
- C++第七次上机实验
- 4.3 概率判别式模型