• RTC 访问网站的一些细节


    经测试: 测试的是docs.qq.com  

    用Fiddler2 去监控时,因为使用了代理。RTC 自动会使用winhttp 的,所以在看的时候是可以的。一旦退出了Fiddler2  就又不可以了。

    1. UseWinHTTP = False 时如果请求的是https的,用的是winnet.dll 的 HttpOpenRequest。不可以自定义使用自己写入的cookie 。怎么设置都没有用,因为默认open的时候,他会自己从请求头添加cookie

     RTC open时没有加入 INTERNET_FLAG_NO_COOKIES=   0x00080000

    或者在respone 的时候 自己处理cookie 

    调用 InternetSetCookie、InternetGetCookie 去设置cookie 

      function CanGetIECookie(const   URL:   string;   var   Cookie:   string):   boolean;
      var
          lpvBuffer:   array[0..1000]   of   byte;
          lpdwBufferLength:   cardinal;
      begin
          lpdwBufferLength   :=   sizeof(lpvBuffer);
          result   :=   InternetGetCookie(PChar(URL),   nil,   @lpvBuffer,   lpdwBufferLength);
          if   result   then
              Cookie   :=   pchar(@lpvBuffer);
      end;
    
    var
    
     cookie:string;
    begin
     if CanGetIECookie('https://docs.qq.com', cookie) then
      ShowMessage(cookie);
    
      // Expires 时间如果大于当前时间才会持久化,如果不下,则是只次访问有效而已
     if InternetSetCookie('https://docs.qq.com',nil,'uid=xxx; Path=/; Domain=docs.qq.com; Expires=Wed, 19 Jan 2022 03:02:10 GMT') then
      ShowMessage('成功');
     if InternetSetCookie('https://docs.qq.com',nil,pchar('uid_key='+Wxuid_key+';Path=/; Domain=docs.qq.com; Expires=Wed, 19 Jan 2022 03:02:10 GMT')) then
      ShowMessage('成功');

    2.要么使用UseWinHTTP =True 用 winhttp.dll的。则可以每次都自定义用cookie去访问

    3.使用UseWinhttp =True 时用 winhttp.dll 在windows server2008R2 的系统下。(我这里只测试了这WIN2008R2 据说WIN7也会)

     因为该系统下默认不开启 TLS 1.1 和 TLS 1.2  作为默认安全协议

    导致使用winhttp.dll 时访问有些https网站会出现 加载ssl出现内部错误。报12175 错误, 经过callback 发现是 WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR 

    https://docs.microsoft.com/zh-cn/windows/win32/api/winhttp/nc-winhttp-winhttp_status_callback

    2021-12-27 08:43:31.491; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_HANDLE_CREATED info:
    2021-12-27 08:43:31.499; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_RESOLVING_NAME info:
    2021-12-27 08:43:31.499; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_NAME_RESOLVED info:
    2021-12-27 08:43:31.506; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER info:
    2021-12-27 08:43:31.506; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER info:
    2021-12-27 08:43:31.577; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_RESOLVING_NAME info:
    2021-12-27 08:43:31.577; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_NAME_RESOLVED info:
    2021-12-27 08:43:31.577; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER info:
    2021-12-27 08:43:31.577; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER info:
    2021-12-27 08:43:31.577; OpenConnection.HttpStatusCallback : WINHTTP_CALLBACK_STATUS_SECURE_FAILURE info: WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR

    需要使用 MicrosoftEasyFix51044 进行修复。

    参考:

    更新以在 Windows 的 WinHTTP 中启用 TLS 1.1 和 TLS 1.2 作为默认安全协议
    https://stackoverflow.com/questions/55642128/why-i-get-error-security-error-12175-with-tnethttprequest
    https://support.microsoft.com/en-us/topic/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-winhttp-in-windows-c4bd73d2-31d7-761e-0178-11268bb10392#bkmk_easy

    相关文件:

    链接:https://pan.baidu.com/s/1NaxUpBU9vMXaYHLs18WRCg
    提取码:pyaa

    还有一个可以考虑用 IISCrypto.exe  修复,但没有试过。

    https://www.cnblogs.com/yibinboy/p/9775618.html

    链接:https://pan.baidu.com/s/18Ph21cP8bui2ubBPe9_-dw
    提取码:be70

  • 相关阅读:
    [转] linux中 参数命令 -- 和
    ECharts 报表事件联动系列一:刷新页面
    Echarts 简单报表系列三:饼状图
    Echarts 简单报表系列二:折线图
    Echarts 简单报表系列一:柱状图
    Golang 在 Mac、Linux、Windows 下如何交叉编译(转)
    Spring Boot 打war包并利用docBase指定根目录为打包的工程
    JdbcTemplate查询返回JavaBean的几种方法
    Spring JdbcTemplate 查询结果集Map反向生成Java实体(转)
    Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?(转)
  • 原文地址:https://www.cnblogs.com/BTag/p/15718234.html
Copyright © 2020-2023  润新知