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

原文地址:https://www.cnblogs.com/BTag/p/15718234.html