This commit is contained in:
杨志
2026-01-20 16:41:42 +08:00
parent 14813e9d5d
commit bd7687930d
3 changed files with 45 additions and 32 deletions

View File

@@ -132,7 +132,7 @@ class Crawler extends BaseController
return trim($cookies); return trim($cookies);
} }
// 只保留用户填写的Cookie同名键多值则取最后一个(单JSESSIONID场景 // 只保留用户填写的Cookie支持同名键多值(如双JSESSIONID
$cookieData = $cookies['请求 Cookie'] ?? $cookies; $cookieData = $cookies['请求 Cookie'] ?? $cookies;
$normalized = []; $normalized = [];
@@ -141,26 +141,29 @@ class Crawler extends BaseController
if ($k === '') { if ($k === '') {
continue; continue;
} }
$v = is_array($value) ? end($value) : $value; $vals = is_array($value) ? $value : [$value];
foreach ($vals as $v) {
$v = trim((string)$v); $v = trim((string)$v);
if ($v === '') { if ($v === '') {
continue; continue;
} }
// 后面的值覆盖前面的值,确保单值 $normalized[$k][] = $v;
$normalized[$k] = $v; }
} }
// 将 JSESSIONID 放在最前(如果存在),其余按键名顺序 // 将 JSESSIONID 放在最前(如果存在),其余按键名顺序,多值全部保留
$parts = []; $parts = [];
if (isset($normalized['JSESSIONID'])) { if (isset($normalized['JSESSIONID'])) {
// 按用户需求:输出两个相同的 JSESSIONID foreach ($normalized['JSESSIONID'] as $v) {
$parts[] = 'JSESSIONID=' . $normalized['JSESSIONID']; $parts[] = 'JSESSIONID=' . $v;
$parts[] = 'JSESSIONID=' . $normalized['JSESSIONID']; }
unset($normalized['JSESSIONID']); unset($normalized['JSESSIONID']);
} }
foreach ($normalized as $k => $v) { foreach ($normalized as $k => $vArr) {
foreach ($vArr as $v) {
$parts[] = $k . '=' . $v; $parts[] = $k . '=' . $v;
} }
}
return implode('; ', $parts); return implode('; ', $parts);
} }

View File

@@ -199,7 +199,7 @@ class CrawlerService
return trim($cookies); return trim($cookies);
} }
// 只保留用户填写的Cookie同名键多值则取最后一个(单JSESSIONID场景 // 只保留用户填写的Cookie支持同名键多值(如双JSESSIONID
$cookieData = $cookies['请求 Cookie'] ?? $cookies; $cookieData = $cookies['请求 Cookie'] ?? $cookies;
$normalized = []; $normalized = [];
@@ -208,25 +208,29 @@ class CrawlerService
if ($k === '') { if ($k === '') {
continue; continue;
} }
$v = is_array($value) ? end($value) : $value; $vals = is_array($value) ? $value : [$value];
foreach ($vals as $v) {
$v = trim((string)$v); $v = trim((string)$v);
if ($v === '') { if ($v === '') {
continue; continue;
} }
$normalized[$k] = $v; $normalized[$k][] = $v;
}
} }
// 将 JSESSIONID 放在最前(如果存在),其余按键名顺序 // 将 JSESSIONID 放在最前(如果存在),其余按键名顺序,多值全部保留
$parts = []; $parts = [];
if (isset($normalized['JSESSIONID'])) { if (isset($normalized['JSESSIONID'])) {
// 按需求:输出两个相同的 JSESSIONID foreach ($normalized['JSESSIONID'] as $v) {
$parts[] = 'JSESSIONID=' . $normalized['JSESSIONID']; $parts[] = 'JSESSIONID=' . $v;
$parts[] = 'JSESSIONID=' . $normalized['JSESSIONID']; }
unset($normalized['JSESSIONID']); unset($normalized['JSESSIONID']);
} }
foreach ($normalized as $k => $v) { foreach ($normalized as $k => $vArr) {
foreach ($vArr as $v) {
$parts[] = $k . '=' . $v; $parts[] = $k . '=' . $v;
} }
}
return implode('; ', $parts); return implode('; ', $parts);
} }

View File

@@ -246,7 +246,13 @@
<div class="form-group"> <div class="form-group">
<label for="cookie-jsessionid">JSESSIONID</label> <label for="cookie-jsessionid">JSESSIONID</label>
<input type="text" id="cookie-jsessionid" placeholder="示例9E592C9CC752F8552F0D746D91958475"> <input type="text" id="cookie-jsessionid" placeholder="示例9E592C9CC752F8552F0D746D91958475">
<small>从浏览器开发者工具中复制JSESSIONID的值</small> <small>从浏览器开发者工具中复制JSESSIONID的值(必要)</small>
</div>
<div class="form-group">
<label for="cookie-jsessionid2">JSESSIONID(可选,第二个)</label>
<input type="text" id="cookie-jsessionid2" placeholder="如抓包中存在第二个JSESSIONID可填写">
<small>若抓包中请求头里有第二个JSESSIONID请一起填写</small>
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -445,6 +451,7 @@
// 组装Cookie数据 // 组装Cookie数据
function buildCookiesPayload(messageContainerId) { function buildCookiesPayload(messageContainerId) {
const jsessionid = document.getElementById('cookie-jsessionid').value.trim(); const jsessionid = document.getElementById('cookie-jsessionid').value.trim();
const jsessionid2 = document.getElementById('cookie-jsessionid2').value.trim();
const serverid = document.getElementById('cookie-serverid').value.trim(); const serverid = document.getElementById('cookie-serverid').value.trim();
if (!jsessionid || !serverid) { if (!jsessionid || !serverid) {
@@ -452,12 +459,11 @@
return null; return null;
} }
return { const cookies = { "请求 Cookie": {} };
"请求 Cookie": { // 支持双 JSESSIONID
"JSESSIONID": jsessionid, cookies["请求 Cookie"]["JSESSIONID"] = jsessionid2 ? [jsessionid, jsessionid2] : jsessionid;
"SERVERID": serverid cookies["请求 Cookie"]["SERVERID"] = serverid;
} return cookies;
};
} }
// 全选/取消全选 // 全选/取消全选