揰掵佲 发表于 2025-1-10 11:31:20

【避坑指南】WinHTTP5_1 中的 WinHttp程序 的 安全频道支持出错

【避坑指南】WinHTTP5_1 中的 WinHttp程序 的 网页访问


------ Encounted exception:
Code: 0
Source: WinHttp.WinHttpRequest
Description: 安全频道支持出错





这2个需要屏蔽掉 不然的话 遇到HTTP2的网站是会出现 安全频道支持出错 的问题
验证证书 = 是否以文本开头 (网址, "https://", 假)
置SSL版本 (真, 真, 真)

<火山程序 类型 = "通常" 版本 = 1 />

方法 网页访问 <公开 类型 = 逻辑型 注释 = "访问网页资源,成功返回真,失败返回假." 注释 = "如果WinHttpRequest对象尚未创建,将自动创建." 折叠 "" "">
参数 网址 <类型 = 文本型 注释 = "完整的网页地址,必须包含\"http://\"或者\"https://\".">
参数 访问方式 <类型 = WinHttp访问方式 注释 = "WinHttp访问方式.*" @默认值 = WinHttp访问方式.GET>
参数 文本提交 <类型 = 文本型 注释 = "二选一 \"POST\"专用,提交文本型数据,为空文本时忽略该参数." @默认值 = "">
参数 字节集提交 <类型 = 字节集类 注释 = "二选一 \"POST\"专用,提交字节集数据,默认为忽略该参数." @默认值 = 空对象>
参数 提交Cookie <类型 = 文本型 注释 = "设置提交时的cookie,为空文本表示无." @默认值 = "">
参数 合并Cookie <类型 = 逻辑型 注释 = "当设置需要返回Cookie时(\"返回协议头\"参数不为默认值),指定是否将\"提交Cookie\"和访问后获得的Cookie合并到一起返回."
      @默认值 = 真>
参数 附加协议头 <类型 = 文本型 注释 = "多协议头请用换行符隔开,以换行符\"\\r\\n\"分隔,以\"头名称\"+\": \"+\"值\"为内容的形式." @默认值 = "">
参数 补全协议头 <类型 = 逻辑型 注释 = "设置是否自动添加必要的协议头,如果值为假,则不添加非传入协议头." @默认值 = 真>
参数 允许重定向 <类型 = 逻辑型 注释 = "指定访问网页时是否允许自动重定向" @默认值 = 假>
参数 代理地址 <类型 = 文本型
      注释 = "代理地址,格式为 8.8.8.8:88,如果值不为空文本,则根据\"代理地址\"、\"代理标识\"、\"代理账号\"、\"代理密码\"指定相关参数进行设置代理服务器." @默认值 = "">
参数 代理标识 <类型 = WinHttp代理标识 注释 = "设置代理方式或登录服务器方式,如果\"代理地址\"的值为空文本,则忽略该参数." @默认值 = WinHttp代理标识.代理>
参数 代理账号 <类型 = 文本型 注释 = "代理账号,如果\"代理地址\"的值为空文本,则忽略该参数." @默认值 = "">
参数 代理密码 <类型 = 文本型 注释 = "代理密码,如果\"代理地址\"的值为空文本,则忽略该参数." @默认值 = "">
参数 超时 <类型 = 整数 注释 = "以毫秒为单位,设置用于超时时间.默认为15000毫秒即15秒,-1为无限等待." @默认值 = 15000>
参数 返回Cookie <类型 = 文本型
      注释 = "用于取回访问结果所带Cookies,如\"合并Cookie\"为真时,则将传入Cookie和返回Cookie合并一起并返回,请传递用于接收返回Cookie的文本变量. 仅当方法返回真时有效."
      @默认值 = 空对象>
参数 返回协议头 <类型 = 文本型 注释 = "用于取回访问结果所带协议头,请传递用于接收协议头的文本变量. 仅当方法返回真时有效." @默认值 = 空对象>
参数 返回状态码 <类型 = 整数类 注释 = "用于取回响应返回的状态码. 仅当方法返回真时有效." @默认值 = 空对象>
参数 返回字节集 <类型 = 字节集类 注释 = "用于取回访问后所得到的字节集数据. 仅当方法返回真时有效." @默认值 = 空对象>
{
    变量 局_是否成功 <类型 = 逻辑型>
    如果 (打开 (网址, 访问方式, ) == 假)// 访问第一步使用打开方法
    {
      返回 (假)// 打开失败
    }
    置超时时间 (超时, 超时, 超时, 超时)
    置代理 (WinHttp代理标志.代理, 代理地址, )
    置代理凭证 (代理标识, 代理账号, 代理密码)
    如果 (代理标识 == WinHttp代理标识.代理)
    {
      置协议头 ("Proxy-Authorization", "Basic " + 字节集到BASE64文本 (文本到多字节 (代理账号 + ":" + 代理密码, 假), , ))// 设置协议头代理方式
    }
    否则
    {
      删除协议头 ("Proxy-Authorization")
    }
    重定向 = 允许重定向
    // 验证证书 = 是否以文本开头 (网址, "https://", 假)
    置忽略证书 (真, 真, 真, 真)
    // 置SSL版本 (真, 真, 真)
    如果 (补全协议头)// 设置默认协议头
    {
      置协议头 ("Accept", "*/*")
      置协议头 ("Referer", 网址)
      置协议头 ("Accept-Language", "zh-cn")
      置协议头 ("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)")
      如果 (访问方式 == WinHttp访问方式.POST)
      {
            置协议头 ("Content-Type", "application/x-www-form-urlencoded")
      }
    }

    置协议头 (, 附加协议头)
    置Cookie (提交Cookie)
    如果 (文本提交 != "")
    {
      局_是否成功 = 发送文本 (文本提交)
    }
    否则
    {
      如果 (字节集提交.是否为空对象 () == 假)
      {
            局_是否成功 = 发送字节集 (字节集提交)
      }
      否则
      {
            局_是否成功 = 发送 ()
      }
    }
    如果 (局_是否成功 == 假)
    {
      返回 (假)// 执行发送失败,直接返加空字节集.
    }
    如果 (返回状态码.是否为空对象 () == 假)
    {
      返回状态码.值 = (整数)状态码
    }
    如果 (文本是否为空对象 (返回Cookie) == 假)
    {
      如果 (合并Cookie && 提交Cookie != "")
      {
            返回Cookie = 合并Cookie (提交Cookie, 取Cookie ())
      }
      否则
      {
            返回Cookie = 取Cookie ()
      }
    }
    如果 (文本是否为空对象 (返回协议头) == 假)
    {
      返回协议头 = 取响应头 ()
    }
    如果 (返回字节集.是否为空对象 () == 假)
    {
      返回字节集 = 响应字节集
    }
    返回 (真)
}



storey 发表于 2025-1-10 17:25:58


新技能已get√

小火伴 发表于 2025-1-13 22:38:42


奉上小小红包希望笑纳
页: [1]
查看完整版本: 【避坑指南】WinHTTP5_1 中的 WinHttp程序 的 安全频道支持出错