开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7487|回复: 9
收起左侧

[技术专题] C++ 网页_访问_对象 源码

[复制链接]
结帖率:87% (79/91)
发表于 2022-11-7 21:23:57 | 显示全部楼层 |阅读模式   江苏省*
授人以鱼不如授人以渔
感谢论坛,这些老油条

[C++] 纯文本查看 复制代码
const IID IID_IWinHttpRequest =
{
  0x06f29373,
  0x5c5a,
  0x4b54,
  {0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e}
};

int main() {
        // Variable for return value
        HRESULT    hr;

        // Initialize COM.
        hr = CoInitialize(NULL);

        IWinHttpRequest *  pIWinHttpRequest = NULL;

        BSTR            bstrResponse = NULL;
        VARIANT         varFalse;
        VARIANT         varEmpty;

        


        CLSID           clsid;

        VariantInit(&varFalse);
        V_VT(&varFalse) = VT_BOOL;
        V_BOOL(&varFalse) = VARIANT_FALSE;

        VariantInit(&varEmpty);
        V_VT(&varEmpty) = VT_ERROR;

        hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);

        if (SUCCEEDED(hr)) {
                hr = CoCreateInstance(clsid, NULL,
                                                          CLSCTX_INPROC_SERVER,
                                                          IID_IWinHttpRequest,
                                                          (void **)&pIWinHttpRequest);
        }
        if (SUCCEEDED(hr)) {   // Open WinHttpRequest.

                //设置超时
                pIWinHttpRequest->SetTimeouts(15000, 15000, 15000, 15000);

                //访问方式
                BSTR bstrMethod = SysAllocString(L"GET");
                //网址
                BSTR bstrUrl = SysAllocString(L"https://www.jiandaoyun.com/signin");

                hr = pIWinHttpRequest->Open(bstrMethod, bstrUrl, varFalse);
                //禁止重定向
                VARIANT varRedirects;
                VariantInit(&varRedirects);
                V_VT(&varFalse) = VT_BOOL;
                V_BOOL(&varRedirects) = VARIANT_FALSE;
                pIWinHttpRequest->put_Option(WinHttpRequestOption::WinHttpRequestOption_EnableRedirects, varRedirects);
                //忽略错误标志
                VARIANT varSslErrorFlag;
                varSslErrorFlag.vt = VT_INT;
                varSslErrorFlag.intVal = SslErrorFlag_Ignore_All;
                pIWinHttpRequest->put_Option(WinHttpRequestOption::WinHttpRequestOption_SslErrorIgnoreFlags, varSslErrorFlag);

                //提交Cookie
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Cookie"), SysAllocString(L""));
                //提交协议头
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Host"), SysAllocString(L"www.jiandaoyun.com"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Sec-Ch-Ua-Mobile"), SysAllocString(L"?0"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Upgrade-Insecure-Requests"), SysAllocString(L"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"User-Agent"), SysAllocString(L"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Accept"), SysAllocString(L"none"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Sec-Fetch-Site"), SysAllocString(L"?0"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Sec-Fetch-Mode"), SysAllocString(L"navigate"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Sec-Fetch-User"), SysAllocString(L"?1"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Sec-Fetch-Dest"), SysAllocString(L"document"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Accept-Language"), SysAllocString(L"zh-CN,zh;q=0.9"));
                pIWinHttpRequest->SetRequestHeader(SysAllocString(L"Referer"), SysAllocString(L"https://www.jiandaoyun.com/signin"));
                //使用SysFreeString连续释放一个BSTR
                SysFreeString(bstrMethod);
                SysFreeString(bstrUrl);
        }
        
        if (SUCCEEDED(hr)) {   // 发送请求。
                hr = pIWinHttpRequest->Send(varEmpty);
        }
        if (SUCCEEDED(hr)) {   // 获取响应文本。
                hr = pIWinHttpRequest->get_ResponseText(&bstrResponse);
        }        
        if (SUCCEEDED(hr)) {   // 获取响应文本。
                        //返回Cookies
                BSTR    bstrResponse1 = NULL;
                pIWinHttpRequest->GetAllResponseHeaders(&bstrResponse1);
        }
        if (SUCCEEDED(hr)) {   // 获取响应文本。
                //网页返回的状态代码,例如:200;302;404等
                long stat;
                pIWinHttpRequest->get_Status(&stat);
        }

        std::wstring ws(bstrResponse, SysStringLen(bstrResponse));

        // 将响应打印到控制台。
        std::wcout << ws << std::endl;

        // 释放内存。
        if (pIWinHttpRequest)
                pIWinHttpRequest->Release();
        if (bstrResponse)
                SysFreeString(bstrResponse);

        CoUninitialize();

评分

参与人数 2好评 +2 精币 +4 收起 理由
阿龙 + 1 + 2 YYDS~!
冰点 + 1 + 2 感谢分享,很给力!~

查看全部评分


结帖率:97% (131/135)

签到天数: 16 天

发表于 2022-12-3 19:47:11 高大上手机用户 | 显示全部楼层   福建省泉州市
好技术,学习了         
回复 支持 反对

使用道具 举报

发表于 2022-12-3 09:34:58 | 显示全部楼层   浙江省宁波市
6666666666666
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2022-11-24 11:24:45 | 显示全部楼层   河北省秦皇岛市
谢谢LZ分享,学习到新技能。
回复 支持 反对

使用道具 举报

发表于 2022-11-22 19:51:25 | 显示全部楼层   美国
好技术,学习了
回复 支持 反对

使用道具 举报

发表于 2022-11-18 23:14:21 | 显示全部楼层   湖南省益阳市
好技术,学习了
回复 支持 反对

使用道具 举报

发表于 2022-11-14 08:05:57 | 显示全部楼层   四川省泸州市
感谢楼主分享
回复 支持 反对

使用道具 举报

结帖率:87% (79/91)

签到天数: 8 天

 楼主| 发表于 2022-11-8 18:14:39 | 显示全部楼层   江苏省*
[C++] 纯文本查看 复制代码
#include <windows.h>
#include <stdio.h>
#include <objbase.h>

#include "httprequest.h"

#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")

// IID for IWinHttpRequest.
const IID IID_IWinHttpRequest =
{
    0x06f29373,
    0x5c5a,
    0x4b54,
    {0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e}
};

int main()
{
    // Variable for return value
    HRESULT    hr;

    // Initialize COM
    hr = CoInitialize( NULL );

    IWinHttpRequest *  pIWinHttpRequest = NULL;

    BSTR            bstrResponse = NULL;
    VARIANT         varFalse;
    VARIANT         varEmpty;
    VARIANT         varUserAgent;

    CLSID           clsid;

    VariantInit(&varFalse);
    V_VT(&varFalse)   = VT_BOOL;
    V_BOOL(&varFalse) = VARIANT_FALSE;

    VariantInit(&varEmpty);
    V_VT(&varEmpty) = VT_ERROR;

    varUserAgent.vt = VT_BSTR;
    varUserAgent.bstrVal = NULL;

    hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(clsid,
                              NULL,
                              CLSCTX_INPROC_SERVER,
                              IID_IWinHttpRequest,
                              (void **)&pIWinHttpRequest);
    }
    if (SUCCEEDED(hr))
    {
        // Open WinHttpRequest.
        BSTR bstrMethod  = SysAllocString(L"GET");
        BSTR bstrUrl = SysAllocString(L"https://microsoft.com");
        hr = pIWinHttpRequest->Open(bstrMethod,
                                    bstrUrl,
                                    varFalse);
        SysFreeString(bstrMethod);
        SysFreeString(bstrUrl);
    }
    if (SUCCEEDED(hr))
    {
        // Specify the user agent.
        varUserAgent.vt = VT_BSTR;
        varUserAgent.bstrVal =
                   SysAllocString(
                           L"A WinHttpRequest Example Program");

        //varUserAgent is L"A WinHttpRequest Example Program");
        hr = pIWinHttpRequest->put_Option(
                                 WinHttpRequestOption_UserAgentString,
                                 varUserAgent);
    }
    if (SUCCEEDED(hr))
    {    // Send Request.
        hr = pIWinHttpRequest->Send(varEmpty);
    }
    if (SUCCEEDED(hr))
    {
        // Get user agent string.
        hr = pIWinHttpRequest->get_Option(
                                 WinHttpRequestOption_UserAgentString,
                                 &varUserAgent);
        // Print response to console.
        wprintf(L"%s\n\n", varUserAgent.bstrVal);

        // Get URL.
        hr = pIWinHttpRequest->get_Option(WinHttpRequestOption_URL,
                                          &varUserAgent);
        // Print response to console.
        wprintf(L"%s\n\n", varUserAgent.bstrVal);

        // Get URL Code Page.
        hr = pIWinHttpRequest->get_Option(
                                     WinHttpRequestOption_URLCodePage,
                                     &varUserAgent);
        // Print response to console.
        wprintf(L"%u\n\n", varUserAgent.lVal);

        // Convert percent symbols to escape sequences.
        hr = pIWinHttpRequest->get_Option(
                              WinHttpRequestOption_EscapePercentInURL,
                              &varUserAgent);
        // Print response to console.
        wprintf(L"%s\n", varUserAgent.boolVal?L"True":L"False");
    }

    // Release memory.
    if (pIWinHttpRequest)
        pIWinHttpRequest->Release();
    if (bstrResponse)
        SysFreeString(bstrResponse);
    if (varUserAgent.bstrVal)
        SysFreeString(varUserAgent.bstrVal);

    CoUninitialize();
    return 0;
}

回复 支持 反对

使用道具 举报

发表于 2022-11-8 16:06:53 | 显示全部楼层   江苏省泰州市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 19 天

发表于 2022-11-8 09:40:12 | 显示全部楼层   山东省枣庄市
感觉libcurll相较winhttp更好一点。
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表