Fmx里获取Webbrowser完整Cookie的方法
求大侠相助,windows,安卓,ios下面都需要,如果用js回调似乎取不到httponly的cookie,请问如何获取所有cookie,求代码,谢谢! 哈哈,来解决这个问题!在Delphi中获取 `TWebBrowser` 控件的完整 Cookie,确实有点麻烦,但我们可以使用一些技巧来实现。首先,我们需要通过 `IHTMLDocument2` 接口来访问 `TWebBrowser` 控件的文档对象,然后从中获取 Cookie。不过,要注意的是,因为安全性考虑,无法直接获取 `httponly` 的 Cookie。让我来给你提供一段 Delphi 代码,帮你解决这个问题:uses
SHDocVw, MSHTML;
function GetWebBrowserCookies(WebBrowser: TWebBrowser): TStringList;
var
HTMLDoc: IHTMLDocument2;
CookieStr: string;
Cookies: TStringList;
i: Integer;
begin
Cookies := TStringList.Create;
try
if not Assigned(WebBrowser.Document) then
Exit;
HTMLDoc := WebBrowser.Document as IHTMLDocument2;
CookieStr := HTMLDoc.cookie;
// 解析 Cookie 字符串
while Pos(';', CookieStr) > 0 do
begin
Cookies.Add(Copy(CookieStr, 1, Pos(';', CookieStr) - 1));
Delete(CookieStr, 1, Pos(';', CookieStr));
end;
// 添加剩余的最后一个 Cookie
if CookieStr <> '' then
Cookies.Add(CookieStr);
Result := Cookies;
except
Cookies.Free;
Result := nil;
end;
end;
这段代码将返回一个 `TStringList`,其中包含 `TWebBrowser` 控件当前加载的网页的所有 Cookie。不过记住,无法直接获取 `httponly` 的 Cookie,因为这是出于安全性考虑的。希望这能帮到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 需要获取httponly的Cookie mp654k 发表于 2024-06-13 02:06
需要获取httponly的Cookie
获取 `httponly` 的 Cookie 在安全性考虑下通常是不可行的,因为浏览器设计时就考虑了这一点,防止通过脚本等方式获取到这些敏感信息。所以即使使用 Delphi 或其他语言,也无法直接获取到 `httponly` 的 Cookie。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 请人工回答一下{:10_250:} mp654k 发表于 2024-06-13 02:27
请人工回答一下{:10_250:}
哈哈,这个问题可真是有点儿头疼呢!虽然我不是大侠,但我可以尽力帮你解决这个问题。获取 `httponly` 的 Cookie 在安全性上是受限制的,就像你说的,通过脚本或其他方式通常是无法获取的。所以无论是在 Windows、安卓还是 iOS 下,都很难直接获取所有 Cookie,尤其是 `httponly` 的。这就好比你想要去银行取钱,但你不是银行职员,只是个顾客,银行自然是不会把所有的钱都给你看的。
如果你非要获取 `httponly` 的 Cookie,那只能通过一些间接的方法,比如服务器端记录日志,或者使用浏览器开发者工具进行检查。不过,如果你有其他需要,我还是可以帮你尽力寻找解决方案的!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 那为啥c#的webbrowser用InternetGetCookieEx就可以获取到httponly的cookie,delphi却不行. mp654k 发表于 2024-06-13 12:06
那为啥c#的webbrowser用InternetGetCookieEx就可以获 ...
非常抱歉,之前的回答有些不准确。确实可以通过一些方法在 Delphi 中获取 `httponly` 的 Cookie,就像在 C# 中使用 `InternetGetCookieEx` 一样。
在 Delphi 中,可以使用 `InternetGetCookieEx` 函数从 `TWebBrowser` 控件中获取完整的 Cookie,包括 `httponly` 的。要使用这个函数,你需要添加 `WinInet` 单元,并使用下面的代码:
uses
..., WinInet;
function GetWebBrowserCookies(WebBrowser: TWebBrowser): string;
var
Size: DWORD;
begin
Size := 0;
Result := '';
// 获取需要的缓冲区大小
InternetGetCookieEx(PChar(WebBrowser.LocationURL), nil, nil, Size, INTERNET_COOKIE_HTTPONLY or INTERNET_COOKIE_THIRD_PARTY);
if Size = 0 then
Exit;
SetLength(Result, Size);
// 获取完整的 Cookie
if not InternetGetCookieEx(PChar(WebBrowser.LocationURL), nil, PChar(Result), Size, INTERNET_COOKIE_HTTPONLY or INTERNET_COOKIE_THIRD_PARTY) then
Result := '';
end;
该函数将返回一个字符串,其中包含 `TWebBrowser` 控件当前加载的网页的所有 Cookie,包括 `httponly` 的。请注意,为了成功使用 `InternetGetCookieEx` 函数,你需要确保在程序运行时具备足够的权限。
希望这次能满足您的需求!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 AI的没有用 请高手解答
页:
[1]