如何使用 TEmbeddedWB 获取所有 cookie 详细信息?
How to get all cookie details with TEmbeddedWB?
在 Delphi XE8 VCL 表单应用程序中,使用 TEmbeddedWB
我用这种方法获取 cookies:
CookieStr := EmbeddedWB1.Cookie;
CodeSite.Send('CookieStr', CookieStr);
这是结果(例如):
name1=value1; name2=value2; name3=value3
但是,如您所见,这只会获取 cookie 的 name 和 value。
那么如何获取其他 cookie 字段,例如 path、expiration date 等?
解决方法如下:
首先,我们需要熟悉Winapi FILETIME structure。
然后从这里获取 IE cookie 文件:
C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Cookies\
现在查找与您从 TEmbeddedWB.Cookie
.
获得的 name=value
对相同的 cookie 文件
这是一个 IE cookie 文件的内容示例,我们从中获取数据:
(与活着的人或其他当局的相似之处纯属偶然,并非故意!)
我们可以从红色注释中看出各个数字的含义。
这里是破译这些数字的源代码:
uses Winapi.Windows;
function ConvertWinapiFileTimeLoHiValuesToDateTimeStr(const AFTLoValue, AFTHiValue: Cardinal): string;
const
InvalidDate = '01/01/80 12:00:00 AM';
var
lCookieFileTime: TFileTime;
lDosDT: Integer;
lLocalFileTime: TFileTime;
begin
lCookieFileTime.dwLowDateTime := AFTLoValue;
lCookieFileTime.dwHighDateTime := AFTHiValue;
FileTimeToLocalFiletime(lCookieFileTime, lLocalFileTime);
if FileTimeToDosDateTime(lLocalFileTime, Longrec(lDosDT).Hi, Longrec(lDosDT).Lo) then
begin
try
Result := DateTimeToStr(FiledateToDatetime(lDosDT));
except
Result := InvalidDate;
end;
end
else
Result := InvalidDate;
end;
现在我们可以将此函数与上述 cookie 文件中的数字一起使用,例如:
CodeSite.Send('Expiration Date', ConvertWinapiFileTimeLoHiValuesToDateTimeStr(2496134912, 30471078));
CodeSite.Send('Modified Date', ConvertWinapiFileTimeLoHiValuesToDateTimeStr(2624224682, 30465043));
这会给我们这个结果:
在 Delphi XE8 VCL 表单应用程序中,使用 TEmbeddedWB
我用这种方法获取 cookies:
CookieStr := EmbeddedWB1.Cookie;
CodeSite.Send('CookieStr', CookieStr);
这是结果(例如):
name1=value1; name2=value2; name3=value3
但是,如您所见,这只会获取 cookie 的 name 和 value。
那么如何获取其他 cookie 字段,例如 path、expiration date 等?
解决方法如下:
首先,我们需要熟悉Winapi FILETIME structure。
然后从这里获取 IE cookie 文件:
C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Cookies\
现在查找与您从 TEmbeddedWB.Cookie
.
name=value
对相同的 cookie 文件
这是一个 IE cookie 文件的内容示例,我们从中获取数据:
(与活着的人或其他当局的相似之处纯属偶然,并非故意!)
我们可以从红色注释中看出各个数字的含义。
这里是破译这些数字的源代码:
uses Winapi.Windows;
function ConvertWinapiFileTimeLoHiValuesToDateTimeStr(const AFTLoValue, AFTHiValue: Cardinal): string;
const
InvalidDate = '01/01/80 12:00:00 AM';
var
lCookieFileTime: TFileTime;
lDosDT: Integer;
lLocalFileTime: TFileTime;
begin
lCookieFileTime.dwLowDateTime := AFTLoValue;
lCookieFileTime.dwHighDateTime := AFTHiValue;
FileTimeToLocalFiletime(lCookieFileTime, lLocalFileTime);
if FileTimeToDosDateTime(lLocalFileTime, Longrec(lDosDT).Hi, Longrec(lDosDT).Lo) then
begin
try
Result := DateTimeToStr(FiledateToDatetime(lDosDT));
except
Result := InvalidDate;
end;
end
else
Result := InvalidDate;
end;
现在我们可以将此函数与上述 cookie 文件中的数字一起使用,例如:
CodeSite.Send('Expiration Date', ConvertWinapiFileTimeLoHiValuesToDateTimeStr(2496134912, 30471078));
CodeSite.Send('Modified Date', ConvertWinapiFileTimeLoHiValuesToDateTimeStr(2624224682, 30465043));
这会给我们这个结果: