VC++访问HTTPS服务器(不受限制)

之前用VC客户端访问HTTPS服务器时,遇到“认证作者无效或者不正确”,“证书已失效”及类似的问题相当棘手,在这里我把可以忽略这些认证的方法写出来,让遇到相同问题的朋友可以更快解决问题。
下面贴上代码:(可以直接使用,需要包含 afxinet.h )

    CHttpConnection *myconn;
    CString VoidText;
    CString strSentence,strGetSentence;
    int _my;
    CString Call_Url ="api.btctrade.com";
    INTERNET_PORT nPort;
    DWORD dwServiceType;
    CString strServerName;
    CString strObject;
    DWORD _dwStatus,_dwStatusLen;
    CString _Url,_UrlHttp = "https://";
    _Url.Format("%s%s",_UrlHttp,Call_Url);//这里拼成的字符串是"https://api.btctrade.com" 
    BOOL _GetParse = AfxParseURL(_Url,dwServiceType,strServerName,strObject,nPort);//调用解析URL方法,自动得到端口号

    BOOL _session = mysession.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,1000*20);  //设置连接超时20秒
    _session = mysession.EnableStatusCallback(TRUE);    

    myconn=mysession.GetHttpConnection(Call_Url,INTERNET_FLAG_SECURE,nPort,NULL,NULL);//连接https服务器
    CHttpFile*  myfile=myconn->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/api/balance/",NULL, 1,  
        NULL, NULL,INTERNET_FLAG_SECURE |
        INTERNET_FLAG_EXISTING_CONNECT |  
        INTERNET_FLAG_RELOAD |  
        INTERNET_FLAG_NO_CACHE_WRITE |  
        INTERNET_FLAG_IGNORE_CERT_DATE_INVALID |  
        INTERNET_FLAG_IGNORE_CERT_CN_INVALID/*| INTERNET_FLAG_TRANSFER_ASCII*/);//打开请求 ,这几个标识都要加上
    try
    {
        DWORD dwFlags;
        BOOL _query = myfile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS | INTERNET_OPTION_SECURITY_CERTIFICATE,dwFlags);  //认证作者无效或者不正确
        dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA ;  //查询选择项  
        _my = myfile->SetOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);//设置选择项

         CString _Content = "Content-Type:application/json";
         BOOL _9 = myfile->AddRequestHeaders("Accept-Charset:UTF8");//增加头信息
         BOOL _4 = myfile->AddRequestHeaders(_Content);


        char* head = "key=zh777-eif2w-ua2n8-5xm2t-18jrt-4ck8e-57wce&coin=btc&amount=1.234&price=543&version=2";
        CString SendStr;
        SendStr.Format("\"key\":zh777-eif2w-ua2n8-5xm2t-18jrt-4ck8e-57wce,\"signature\":%s,nonce:2}",_getstr);
        head = SendStr.GetBuffer();
        int _head;
        _head = strlen(head);
        if (myfile->SendRequest((LPSTR)(LPTSTR)head,sizeof(char)*_head))//发送数据内容
        {
            myfile->QueryInfo(HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE ,  
                &_dwStatus, &_dwStatusLen, 0);  //这里可以看到是否发送成功 _dwStatus 等于200时成功
        }

        while (myfile->ReadString(strSentence))//读取接收到的方法
        {
            strGetSentence+=strSentence;
        }

    }catch(CInternetException *e) {  
        e->ReportError(); 
                //TCHAR szErr[1024];
                //if (e->GetErrorMessage(szErr, sizeof(szErr)))
                //  AfxMessageBox(szErr); //这个看看具体错误
                //e->Delete();
    }
    delete myfile;
    myfile = NULL;
    delete myconn;
    myconn = NULL;
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坤昱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值