You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Indy 10 手动将EditThisCookie导出Cookie添加到TIdHTTP Cookie管理器

问题排查

你的代码存在两处明确错误,是导入失败的核心原因:

  1. 赋值笔误:处理value字段时,你错误将提取到的Cookie值赋值给了Path属性,不仅覆盖了之前正确设置的路径,还没有将值写入Cookie的Value字段:
// 错误写法
if Copy(StringList.Strings[i], 1, 8) = '"value":' then
begin
  StringList.Strings[i] := Copy(StringList.Strings[i], 9, MaxInt);
  MyCookie.Path := GetBetween(StringList.Strings[i], '"', '"');
  Continue;
end;

// 修正写法
if Copy(StringList.Strings[i], 1, 8) = '"value":' then
begin
  StringList.Strings[i] := Copy(StringList.Strings[i], 9, MaxInt);
  MyCookie.Value := GetBetween(StringList.Strings[i], '"', '"');
  Continue;
end;
  1. 缺失去期时间处理:你没有解析expirationDate字段,该字段是Unix时间戳格式,需要转换为Delphi的TDateTime类型赋值给MyCookie.Expires;如果session字段为true则不需要设置过期时间,直接将MyCookie.Session设为true即可。

额外建议:你当前逐行解析JSON的方式容错性极低,只要导出的JSON格式出现换行、空格变化就会解析失败,推荐使用Delphi自带的TJSONObject类处理JSON解析,稳定性更高。


TIdURI相关疑问解答

手动给TIdCookie的所有必填属性(Domain、Path、Name、Value等)赋值的场景下,不需要使用TIdURI实例。只有当你调用TIdCookieManager.AddServerCookie()这类方法,直接从HTTP响应的Set-Cookie头原始字符串导入Cookie时,才需要传入源URI来补全缺失的Domain、Path等属性,你当前的使用场景完全不需要用到TIdURI。


补充代码参考

可在原有逻辑中添加Unix时间戳转换逻辑和对应字段解析:

// 新增Unix时间戳转TDateTime函数
function UnixToDateTime(UnixTime: Integer): TDateTime;
begin
  Result := EncodeDate(1970, 1, 1) + UnixTime / 86400;
end;

// 在InCookie的判断分支中新增以下逻辑
if Copy(StringList.Strings[i], 1, 16) = '"expirationDate":' then
begin
  StringList.Strings[i] := Copy(StringList.Strings[i], 17, MaxInt);
  // 去掉末尾逗号后转换为时间
  MyCookie.Expires := UnixToDateTime(StrToInt(Trim(Copy(StringList.Strings[i], 1, Pos(',', StringList.Strings[i])-1))));
  Continue;
end;
if Copy(StringList.Strings[i], 1, 9) = '"session":' then
begin
  StringList.Strings[i] := Copy(StringList.Strings[i], 10, MaxInt);
  MyCookie.Session := BoolStrToBool(StringList.Strings[i]);
  Continue;
end;

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:39:03