使用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

posted @ 2012-05-08 17:07  stma  阅读(560)  评论(0)    收藏  举报