经测试: 测试的是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