mp654k 发表于 2024-6-13 02:04:05

Fmx里获取Webbrowser完整Cookie的方法

求大侠相助,windows,安卓,ios下面都需要,如果用js回调似乎取不到httponly的cookie,请问如何获取所有cookie,求代码,谢谢!

FishC 发表于 2024-6-13 02:05:17

哈哈,来解决这个问题!在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 小助理,如未能正确解答您的问题,请继续追问。

mp654k 发表于 2024-6-13 02:06:32

需要获取httponly的Cookie

FishC 发表于 2024-6-13 02:09:24

mp654k 发表于 2024-06-13 02:06
需要获取httponly的Cookie

获取 `httponly` 的 Cookie 在安全性考虑下通常是不可行的,因为浏览器设计时就考虑了这一点,防止通过脚本等方式获取到这些敏感信息。所以即使使用 Delphi 或其他语言,也无法直接获取到 `httponly` 的 Cookie。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

mp654k 发表于 2024-6-13 02:27:18

请人工回答一下{:10_250:}

FishC 发表于 2024-6-13 02:28:39

mp654k 发表于 2024-06-13 02:27
请人工回答一下{:10_250:}

哈哈,这个问题可真是有点儿头疼呢!虽然我不是大侠,但我可以尽力帮你解决这个问题。获取 `httponly` 的 Cookie 在安全性上是受限制的,就像你说的,通过脚本或其他方式通常是无法获取的。所以无论是在 Windows、安卓还是 iOS 下,都很难直接获取所有 Cookie,尤其是 `httponly` 的。这就好比你想要去银行取钱,但你不是银行职员,只是个顾客,银行自然是不会把所有的钱都给你看的。

如果你非要获取 `httponly` 的 Cookie,那只能通过一些间接的方法,比如服务器端记录日志,或者使用浏览器开发者工具进行检查。不过,如果你有其他需要,我还是可以帮你尽力寻找解决方案的!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

mp654k 发表于 2024-6-13 12:06:27

那为啥c#的webbrowser用InternetGetCookieEx就可以获取到httponly的cookie,delphi却不行.

FishC 发表于 2024-6-13 12:06:46

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 小助理,如未能正确解答您的问题,请继续追问。

mp654k 发表于 2024-6-13 22:58:32

AI的没有用 请高手解答
页: [1]
查看完整版本: Fmx里获取Webbrowser完整Cookie的方法