63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
import json
|
|
import sys
|
|
|
|
def analyze_har(file_path):
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|
har_data = json.load(f)
|
|
|
|
target_uid = "79ac8a4a-353b-4f3f-8ab1-fa937d2d23f8"
|
|
|
|
entries = har_data['log']['entries']
|
|
|
|
found_responses = []
|
|
|
|
for entry in entries:
|
|
request = entry['request']
|
|
response = entry['response']
|
|
|
|
# Check if the URL contains the UID or the request/response body contains it
|
|
url = request.get('url', '')
|
|
|
|
resp_text = ""
|
|
if 'content' in response and 'text' in response['content']:
|
|
resp_text = response['content']['text']
|
|
|
|
if target_uid in url or target_uid in resp_text:
|
|
found_responses.append({
|
|
'url': url,
|
|
'method': request['method'],
|
|
'status': response['status'],
|
|
'time': entry['startedDateTime'],
|
|
'response': resp_text
|
|
})
|
|
|
|
# Sort by time
|
|
found_responses.sort(key=lambda x: x['time'])
|
|
|
|
for i, item in enumerate(found_responses):
|
|
print(f"--- Entry {i+1} ---")
|
|
print(f"Time: {item['time']}")
|
|
print(f"Method: {item['method']}")
|
|
print(f"URL: {item['url']}")
|
|
print(f"Status: {item['status']}")
|
|
|
|
if item['response']:
|
|
try:
|
|
data = json.loads(item['response'])
|
|
# Only print interesting parts to avoid flooding
|
|
if 'instanceOperation' in data:
|
|
op = data['instanceOperation']
|
|
print(f"Operation: {op.get('operation')} Status: {op.get('isSuccessful')} Progress: {op.get('isInProgress')}")
|
|
if 'stages' in op:
|
|
for stage in op['stages']:
|
|
print(f" Stage: {stage.get('stage')} Successs: {stage.get('isSuccessful')} Msg: {stage.get('stageMsg')}")
|
|
elif 'instance' in data:
|
|
inst = data['instance']
|
|
print(f"Instance Status: {inst.get('explainedStatus')}")
|
|
except:
|
|
print("Response is not JSON or parsing failed")
|
|
print("\n")
|
|
|
|
if __name__ == "__main__":
|
|
analyze_har("/home/naeel/terra/har/f12vmbad.har")
|