gpt4 book ai didi

delphi - 将身份验证从 Web 浏览器传输到 Indy CookieManager

转载 作者:行者123 更新时间:2023-12-01 18:59:38 37 4
gpt4 key购买 nike

如何将 cookie 从 Web 浏览器放入 Indy CookieManager 以进行 Http 请求。

我登录到这样的网站后会收到 cookie..

测试项目 = http://www.megafileupload.com/en/file/373536/Cookie-Tester-rar.html

procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
var
document: IHTMLDocument2;
cookies:tstringlist;
begin
cookies:=tstringlist.Create;
document := WebBrowser1.Document as IHTMLDocument2;
cookies.Add(document.cookie);
cookies.savetofile('test.txt');
end;

HttpOnly Cookie 方法。

function GetCookie(host: PAnsiChar): PAnsiChar;
const
INTERNET_COOKIE_HTTPONLY = 8192;
var
hModule: THandle;
lp: Pointer;
InternetGetCookieEx: function(lpszUrl, lpszCookieName, lpszCookieData
: PAnsiChar; var lpdwSize: DWORD; dwFlags: DWORD; lpReserved: pointer)
: BOOL; stdCall;
CookieSize: DWORD;
CookieData: PAnsiChar;
begin
LoadLibrary('wininet.dll');
hModule := GetModuleHandle('wininet.dll');
if hModule <> 0 then
begin
@InternetGetCookieEx := GetProcAddress(hModule, 'InternetGetCookieExA');
if @InternetGetCookieEx <> nil then
begin
CookieSize := 1024;
Cookiedata := AllocMem(CookieSize);
if InternetGetCookieEx(host, nil, Cookiedata, CookieSize, INTERNET_COOKIE_HTTPONLY, nil) then
result:=cookiedata;
FreeMem(Cookiedata);
end;
end;
end;

最佳答案

由于您使用多个 Delphi 版本标签标记了您的问题,我假设您在每个 Delphi 版本中使用不同版本的 Indy,对吗? Indy 的 cookie 处理逻辑多年来发生了一些变化,并在 2011 年初进行了重大重写,以解决 RFC 6265 的问题。 (这废弃了所有以前的 cookie RFC)。

在当前的 Indy 10 版本中,手动添加 cookie 是使用 TIdCookieManager.AddServerCookie()TIdCookieManager.AddServerCookies() 方法完成的:

procedure AddServerCookie(const ACookie: String; AURL: TIdURI);
procedure AddServerCookies(const ACookies: TStrings; AURL: TIdURI);

两个参数都是必需的,其中 ACookiename=value;单个 cookie 的参数 字符串,AURL 是 cookie 来源的 URL(用于验证 cookie 数据并在需要时初始化任何默认值),例如:

procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
var
document: IHTMLDocument2;
cookies: TStringList;
uri: TIdURI;
begin
document := WebBrowser1.Document as IHTMLDocument2;
cookies := TStringList.Create;
try
// fill cookies as needed, one cookie per line
uri := TIdURI.Create(document.URL);
try
IdCookieManager1.AddServerCookies(cookies, uri);
finally
uri.Free;
end;
finally
cookies.Free;
end;
end;

请记住,document.cookie 属性中可以包含多个 Cookie,因此您必须手动拆分 Cookie,然后才能将它们传递给 TIdCookieManager。此外,document.cookie 属性使用 ; 字符来分隔 cookie,但它也使用 ';'用于分离单个 cookie 的 name=valueparameters 值,因此在拆分 文档时您必须进行一些解析。 cookie 数据。

关于delphi - 将身份验证从 Web 浏览器传输到 Indy CookieManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235897/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com