如何在Jsoup中以字符串而非Map<String,String>类型传递Cookie值?
实现方法
要将从开发者控制台获取的Cookie字符串传入Jsoup,你需要先把字符串解析成Jsoup要求的Map<String, String>类型,再传递给.cookies()方法,具体操作如下:
1. 编写Cookie字符串解析工具方法
自己实现一个简单的解析逻辑,把Cookie字符串拆分成标准的键值对Map:
public static Map<String, String> parseCookieString(String cookieStr) { Map<String, String> cookieMap = new HashMap<>(); if (cookieStr == null || cookieStr.isEmpty()) { return cookieMap; } // 按分号分割每个Cookie键值对,处理前后空格 String[] cookiePairs = cookieStr.split(";"); for (String pair : cookiePairs) { // 分割键和值,限制只分割第一个等号,避免值中包含等号的情况 String[] keyValue = pair.trim().split("=", 2); if (keyValue.length == 2) { cookieMap.put(keyValue[0].trim(), keyValue[1].trim()); } } return cookieMap; }
2. 在Jsoup请求中使用解析后的Map
将从控制台复制的Cookie字符串传入工具方法转成Map,再传入Jsoup请求:
// 从开发者控制台复制的Cookie字符串 String cookieStr = "currency=INR; magnitude=LC; ad=3d468..."; Map<String, String> cookieMap = parseCookieString(cookieStr); // 发起Jsoup请求,同时传入Referer头 Document doc = Jsoup.connect("https://www.valueresearchonline.com/funds/26123/motilal-oswal-flexi-cap-fund-regular-plan/") .cookies(cookieMap) .header("Referer", "https://www.valueresearchonline.com/funds/26123/motilal-oswal-flexi-cap-fund-regular-plan/") .get();
补充说明
- 使用
split("=", 2)是为了兼容Cookie值中包含等号的场景,确保只分割键和值之间的第一个等号。 - 全程用
trim()处理空格,避免Cookie键或值带多余空格导致识别失败。
内容的提问来源于stack exchange,提问作者vikramvi
相关产品推荐
相关产品推荐

