4501|7

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Winlnet下编程问题 [复制链接]

这么一段程序,在模拟器上运行,想访问https类型的网址,但是到了HttpSendRequest函数时,总返回错误,请高手指点,下面是函数红色部分是出错的地方:

void CwininetTestDlg::OnBnClickedButton()
{
       
        HINTERNET        hSession;
        HINTERNET        hConnection;
        HINTERNET        hRequest;

        hSession = InternetOpen(
                                                        L"",
                                                        INTERNET_OPEN_TYPE_DIRECT,
                                                        NULL,
                                                        NULL,
                                                        NULL );

    if ( hSession == NULL )
        {
                AfxMessageBox(L"InternetOpen failed");
                return;
        }

        BOOL res = FALSE;
        DWORD timeout = 10000;
        res = InternetSetOption( hSession, INTERNET_OPTION_CONNECT_TIMEOUT, &timeout, sizeof(DWORD) );
        res = InternetSetOption( hSession, INTERNET_OPTION_SEND_TIMEOUT, &timeout, sizeof(DWORD) );
        res = InternetSetOption( hSession, INTERNET_OPTION_RECEIVE_TIMEOUT, &timeout, sizeof(DWORD) );

        hConnection = InternetConnect(
                                                                        hSession,                       
                                                                        L"https://mail.google.com",
                                                                        443,
                                                                        L"",
                                                                        L"",
                                                                        INTERNET_SERVICE_HTTP,
                                                                        INTERNET_FLAG_SECURE,
                                                                        (DWORD)(this) );

        if ( ( hConnection == NULL ) && ( GetLastError() != ERROR_IO_PENDING ) )
        {
                AfxMessageBox( L"InternetConnect error.\n" );
                return;
        }

        CString strUrlPath = L"";

        hRequest = HttpOpenRequest(
                                                                hConnection,
                                                                L"GET",
                                                                strUrlPath.GetBuffer(),
                                                                NULL,
                                                                NULL,
                                                                NULL,
                                                                INTERNET_FLAG_SECURE|   
                                                                INTERNET_FLAG_IGNORE_CERT_CN_INVALID|INTERNET_FLAG_IGNORE_CERT_DATE_INVALID,
                                                                //INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_NO_CACHE_WRITE,
                                                                (DWORD)(this) );
    strUrlPath.ReleaseBuffer();

        DWORD err = GetLastError();

        if ((hRequest == NULL ) && ( GetLastError() != ERROR_IO_PENDING ) )
        {
                AfxMessageBox( L"HttpOpenRequest error.\n" );
                return;
        }

        CString strHeader = L"APIVersion: 1.0.0\nAccept-Encoding: gzip\nCache-Control: no-cache, must-revalidate\nContent-Type: application/xml\nPragma: no-cache" ;
        CString strData = L"" ;

        BOOL sendRequestResult;
       
        sendRequestResult = HttpSendRequest(
                                                                                hRequest,
                                                                                strHeader.GetBuffer(),
                                                                                (DWORD)strHeader.GetLength(),
                                                                                strData.GetBuffer(),
                                                                                (DWORD)strData.GetLength() );
        strHeader.ReleaseBuffer();
        strData.ReleaseBuffer();

        if ( !sendRequestResult )
        {
                AfxMessageBox( L"HttpSendRequest error.\n" );
                return;
        }


        // 获取相应码
        LPVOID        lpBuffer = NULL;
        DWORD        dwBufferLen = 0;
        BOOL        result;
        result = HttpQueryInfo( hRequest, HTTP_QUERY_STATUS_CODE, (LPVOID)lpBuffer, &dwBufferLen, NULL );
        if ( GetLastError() != ERROR_INSUFFICIENT_BUFFER )
        {
                AfxMessageBox( L"HttpQueryInfo error.\n" );
                return ;
        }
        lpBuffer = new char[dwBufferLen+1];
        result = HttpQueryInfo( hRequest, HTTP_QUERY_STATUS_CODE, (LPVOID)lpBuffer, &dwBufferLen, NULL );

        if ( ( result == FALSE ) || ( lpBuffer == NULL ) )
        {
                AfxMessageBox( L"HttpQueryInfo error.\n" );
                return;
        }
        CString strStatusCode = (LPTSTR)lpBuffer;
        delete lpBuffer;


        // 获取相应头
        result = HttpQueryInfo( hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, (LPVOID)lpBuffer, &dwBufferLen, NULL );
        if ( GetLastError() != ERROR_INSUFFICIENT_BUFFER )
        {
                AfxMessageBox( L"HttpQueryInfo error.\n" );
                return ;
        }
        lpBuffer = new char[dwBufferLen+1];
        result = HttpQueryInfo( hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, (LPVOID)lpBuffer, &dwBufferLen, NULL );

        if ( ( result == FALSE ) || ( lpBuffer == NULL ) )
        {
                AfxMessageBox( L"HttpQueryInfo error.\n" );
                return;
        }
        CString strResHeader = (LPTSTR)lpBuffer;
        delete lpBuffer;
       

        // 获取相应体
        CString strResponseData;
        UINT nSize;
        nSize = 0;
        DWORD bytesRead = 0, allreads = 0;
        BOOL success = TRUE;
        do
        {
                unsigned char buffer[1024];
                success = InternetReadFile( hRequest, buffer, 1024, &bytesRead );
                if ( success && bytesRead > 0 )
                {
                        CString str = (LPTSTR)buffer;
                        strResponseData += str;
                       
                }
                allreads += bytesRead;
        }
        while( success && bytesRead > 0 );
}

最新回复

http://blog.eeworld.net/dthxman/archive/2008/06/27/2592566.aspx 这是我以前做的一个项目,不知道对你有没有帮助。  详情 回复 发表于 2010-2-24 19:56
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不知道 帮顶
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
MARK
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
不知道楼主是否分析过HttpSendRequest函数的参数,现在的问题是sendRequestResult 为假,问题肯定出在参数中。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
我就是对这些东西都不太熟啊,也许哪出了问题我没有发现,请大家指教!

引用 3 楼 wolfmvp 的回复:
不知道楼主是否分析过HttpSendRequest函数的参数,现在的问题是sendRequestResult 为假,问题肯定出在参数中。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 
不能就这么结了,大家推荐一下学习winInet有什么好的资料吧
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
牛年的问题顶到虎年来,,再简洁的汇总一下问题,就是:

winInet下访问https 类网址,httpsendrequest返回值总为0,有没有人了解这个问题,大家随便说说!
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
http://blog.eeworld.net/dthxman/archive/2008/06/27/2592566.aspx
这是我以前做的一个项目,不知道对你有没有帮助。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表