使用bash提取Charles代理记录的xml中的一对值

问题描述 投票:-1回答:1

我有一个Charles代理记录的xml,我试图通过使用XPath从中查找和提取几个值,但不确定是否在不对xpath进行硬编码的情况下提取它们。下面是单个事务的xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE charles-session SYSTEM "https://www.charlesproxy.com/dtd/charles-session-1_2.dtd">

<charles-session>
<transaction status="COMPLETE" method="POST" protocolVersion="HTTP/1.1" protocol="https" host="awcmex.ssdevrd.com" actualPort="443" path="/awcm" remoteAddress="aw.ss.com/12.70.19.19" clientAddress="/127.0.0.1" clientPort="50581" startTime="2020-02-09T12:01:23.043+05:30" startTimeMillis="1581229883043" requestBeginTime="2020-02-09T12:01:26.417+05:30" requestBeginTimeMillis="1581229886417" requestTime="2020-02-09T12:01:26.422+05:30" requestTimeMillis="1581229886422" responseTime="2020-02-09T12:02:59.516+05:30" responseTimeMillis="1581229979516" endTime="2020-02-09T12:02:59.517+05:30" endTimeMillis="1581229979517" duration="96084" dnsDuration="30" connectDuration="704" sslDuration="2250" requestDuration="5" responseDuration="1" latency="93094" overallSpeed="251" requestSpeed="376600" responseSpeed="22323000" totalSize="24206">
<ssl protocol="TLSv1.2" cipherSuite="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" />
<request handshake="1334" headers="324" body="225" mime-type="application/json">
<headers>
<first-line><![CDATA[POST /awcm HTTP/1.1]]></first-line>
<header>
<name>Host</name>
<value>aw.ss.com:443</value></header>
<header>
<name>Content-Type</name>
<value>application/json</value></header>
<header>
<name>User-Agent</name>
<value>awc/1.0.0 CFNetwork/978.2 Darwin/18.7.0 (x86_64)</value></header>
<header>
<name>Connection</name>
<value>keep-alive</value></header>
<header>
<name>Accept</name>
<value>*/*</value></header>
<header>
<name>Accept-Language</name>
<value>en-us</value></header>
<header>
<name>Content-Length</name>
<value>225</value></header>
<header>
<name>Accept-Encoding</name>
<value>br, gzip, deflate</value></header>
<header>
<name>awsession</name>
<value>8594797088EBFD8EC21948508AC910F6F06FB2DF</value></header></headers>
<body><![CDATA[{
  "messageid" : "WSzJUUoYsr9YcP2mYuVP",
  "destinationuuid" : "",
  "durable" : "true",
  "priority" : "0",
  "life" : "0",
  "originapplicationid" : "",
  "originuuid" : "9AEC3865782F5849B21B34C0516F515E",
  "type" : "1"
}]]></body></request>
<response status="200" handshake="22308" headers="0" body="15" mime-type="text/plain" charset="UTF-8">
<headers>
<first-line><![CDATA[HTTP/1.1 200 OK]]></first-line>
<header>
<name>Content-Type</name>
<value>text/plain; charset=UTF-8</value></header>
<header>
<name>Content-Length</name>
<value>15</value></header>
<header>
<name>aw-host</name>
<value>AWC201 [ AWC201.AWSS.DEV ]</value></header>
<header>
<name>Connection</name>
<value>keep-alive</value></header></headers>
<body><![CDATA[{"messages":[]}]]></body></response></transaction></charles-session>

基本上,我想解析并获取会话中的事务数量,每个事务中的用户代理及其值。我试过PROCESS1 = $(xmllint --xpath'string(/ charles-session / transaction [1] / request / headers / header [1])'$ XML_FILE)] >>但是,如果不对header []进行硬编码,则无法在每个事务中获取两者。有什么建议吗?

我有一个Charles代理记录的xml,我试图通过使用XPath从中查找和提取几个值,但不确定是否在不对xpath进行硬编码的情况下提取它们。下面是一个xml ...

xml bash xpath charles-proxy xmllint
1个回答
1
投票

您可以使用它来对用户代理标头进行分组和计数:

© www.soinside.com 2019 - 2024. All rights reserved.