使用wininet进行SSL登陆问题的终极解决
void httpTest()
{
HINTERNET m_hInternet = InternetOpen( L"My Agent",//agent,
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);
HINTERNET m_hSession = InternetConnect( m_hInternet,
(LPCWSTR)L"www.baidu.com",//把协议去了,只要url,还有宽字符 L 你也漏了,
INTERNET_DEFAULT_HTTP_PORT,
L"",
L"",
INTERNET_SERVICE_HTTP,
0,
0);
DWORD errCode = GetLastError();
DWORD secureFlags = INTERNET_FLAG_RELOAD |
INTERNET_FLAG_NO_CACHE_WRITE |
//INTERNET_FLAG_SECURE | //这个应该是https(SSL/PCT),才有用的。你connect时用的http
INTERNET_FLAG_IGNORE_CERT_CN_INVALID |
INTERNET_FLAG_IGNORE_CERT_DATE_INVALID ;
wchar_t const*accept[2] = {L"*/*", NULL};
HINTERNET m_hRequest = HttpOpenRequest( m_hSession,
L"POST",// POST 最终会返回 http 501错误。改用GET是200
NULL,//object,
NULL,
NULL,
accept,//accept,
secureFlags,
0);
errCode = GetLastError();
wchar_t const header[] = {L"Content-Type: application/x-www-form-urlencoded"};
constchar*const post_data ="";
BOOL result = HttpSendRequest( m_hRequest,
header,
wcslen(header),
(LPVOID)post_data,
strlen(post_data));
errCode = GetLastError();
DWORD dwInfoLevel = HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER;
long statusCode =0;
DWORD bufLen =sizeof(statusCode);
::HttpQueryInfo(m_hRequest, dwInfoLevel, &statusCode, &bufLen, 0); //获得返回的http状态码
InternetCloseHandle(m_hInternet);
}
void httpsTest()
{
HINTERNET m_hInternet = InternetOpen( L"My Agent",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);
HINTERNET m_hSession = InternetConnect( m_hInternet,
(LPCWSTR)L"ssltest13.bbtest.net",//baidu没https。换成ssltest13.bbtest.net,你可以在浏览器里看这个页面的内容
INTERNET_DEFAULT_HTTPS_PORT,//https默认端口 443
L"",
L"",
INTERNET_SERVICE_HTTP,
0,
0);
DWORD errCode = GetLastError();
DWORD secureFlags = INTERNET_FLAG_RELOAD |
INTERNET_FLAG_NO_CACHE_WRITE |
INTERNET_FLAG_SECURE |
INTERNET_FLAG_IGNORE_CERT_CN_INVALID |
INTERNET_FLAG_IGNORE_CERT_DATE_INVALID ;
wchar_t const*accept[2] = {L"text/*", NULL};
HINTERNET m_hRequest = HttpOpenRequest( m_hSession,
L"GET", //用get获取页面
NULL,//object,
NULL,
NULL,
accept,//accept,
secureFlags,
0);
errCode = GetLastError();
wchar_t const header[] = {L"Content-Type: application/x-www-form-urlencoded"};
constchar*const post_data ="";
BOOL result = HttpSendRequest( m_hRequest,
header,
wcslen(header),
(LPVOID)post_data,
strlen(post_data));
errCode = GetLastError();
DWORD dwInfoLevel = HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER;
long statusCode =0;
DWORD bufLen =sizeof(statusCode);
::HttpQueryInfo(m_hRequest, dwInfoLevel, &statusCode, &bufLen, 0); //获得返回的http状态码
char buf[128*1024]={0};
bufLen=128*1024;
DWORD dwNumberOfBytesRead =0;
::InternetReadFile(m_hRequest, buf, bufLen, &dwNumberOfBytesRead);//等到http 体
InternetCloseHandle(m_hInternet);
}
转自:http://4develop.in/csdn/CPPLanguage/20110408_09_09d01ac8-e795-4851-b35a-db59551753ff/1&sa=U&ei=buCoT4KxDoSriAftpMHEAw&ved=0CBcQFjABOCg&usg=AFQjCNF32g7F5lXfoGE3LXtl42_CLpcqvw