如何从Tomcat的HTML响应中高效提取CSRF Nonce和JSESSIONID?
提取Tomcat响应中的JSESSIONID和CSRF Nonce的高效方法
方法一:正则表达式(最快最直接)
针对你提供的响应片段,这两个参数的格式非常固定,用正则匹配是最简单高效的方式——不需要处理整个HTML结构,直接定位关键字提取值即可:
- 提取JSESSIONID的正则:
jsessionid=([0-9A-F]+) - 提取CSRF Nonce的正则:
org.apache.catalina.filters.CSRF_NONCE=([0-9A-F]+)
用Python举个简单实现例子:
import re response_html = '<td class="row-right"><a href="/manager/status;jsessionid=34204725C78AB44888F4C107BFF0D782?org.apache.catalina.filters.CSRF_NONCE=FB57DCEE21FCFEA380C05F34759E666D">Server Status</a></td>' # 提取JSESSIONID jsessionid_match = re.search(r'jsessionid=([0-9A-F]+)', response_html) jsessionid = jsessionid_match.group(1) if jsessionid_match else None # 提取CSRF Nonce nonce_match = re.search(r'org.apache.catalina.filters.CSRF_NONCE=([0-9A-F]+)', response_html) csrf_nonce = nonce_match.group(1) if nonce_match else None print(f"JSESSIONID: {jsessionid}") print(f"CSRF Nonce: {csrf_nonce}")
方法二:HTML解析库(更健壮)
如果担心后续Tomcat页面结构变化导致正则失效,可以用HTML解析库(比如Python的BeautifulSoup)来定位元素后提取参数,稳定性更强:
- 解析整个HTML响应,找到包含目标链接的
<a>标签(比如文本为"Server Status"的标签) - 提取该标签的
href属性值 - 拆分href里的路径和参数,分别取出JSESSIONID和Nonce
Python示例代码:
from bs4 import BeautifulSoup from urllib.parse import urlparse, parse_qs response_html = '<td class="row-right"><a href="/manager/status;jsessionid=34204725C78AB44888F4C107BFF0D782?org.apache.catalina.filters.CSRF_NONCE=FB57DCEE21FCFEA380C05F34759E666D">Server Status</a></td>' soup = BeautifulSoup(response_html, 'html.parser') # 定位目标链接 status_link = soup.find('a', string='Server Status') if status_link: href = status_link['href'] # 拆分JSESSIONID jsessionid = href.split(';')[1].split('=')[1] # 拆分查询参数中的Nonce parsed_url = urlparse(href) query_params = parse_qs(parsed_url.query) csrf_nonce = query_params.get('org.apache.catalina.filters.CSRF_NONCE', [None])[0] print(f"JSESSIONID: {jsessionid}") print(f"CSRF Nonce: {csrf_nonce}")
两种方法各有侧重:正则适合当前固定格式的场景,编写速度快;HTML解析库适合长期维护,能应对页面结构的小变动。
内容的提问来源于stack exchange,提问作者GARcher
相关产品推荐
相关产品推荐

