import json
import os
import sys
from urllib.parse import parse_qsl
import hashlib
import re

METHOD = "method"
QUERY = "query"
SCHEME = "scheme"
HOST = "host"
PATH = "path"
REQUEST = "request"
HEADER = "header"
HEADERS = "headers"
TEXT = "text"
NAME = "name"
FIRST_LINE = "firstLine"
RESPONSE = "response"
VALUE = "value"
BODY = "body"
STATUS = "status"
TIMES = "times"
START = "start"
DURATIONS = "durations"
TOTAL = "total"
DNS = "dns"
CONNECT = "connect"
SSL = "ssl"
LATENCY = "latency"

def value(data, *keys):
	current = data
	for k in keys:
		if k in current:
			current = current[k]
		else:
			return None
	return current	

class Request(object):
	def __init__(self, request_data):
		self.data = request_data

	def method(self):
		return self.data[METHOD]

	def url(self):
		scheme = self.data[SCHEME]
		host = self.data[HOST] + self.data[PATH] if self.data[PATH] else self.data[HOST]
		return f"{scheme}://{host}"

	def full_url(self):
		url = self.url()
		params = self.params_as_text()

		if params:
			url = f"{url}?{params}"
		return url

	def headers(self):
		header_data = value(self.data, REQUEST, HEADER, HEADERS)
		headers = dict()
		for header in header_data:
			headers[header[NAME]] = header[VALUE]
		return headers

	def params(self):
		query = self.data[QUERY]
		if query:
			return dict(parse_qsl(query))
		return {}

	def params_as_text(self):
		return self.data[QUERY]

	def body(self):
		return value(self.data, BODY, TEXT)

	def response_status(self):
		return value(self.data, RESPONSE, STATUS)

	def response_header_first_line(self):
		return value(self.data, RESPONSE, HEADER, FIRST_LINE)

	def response_body(self):
		return value(self.data, BODY, TEXT)

	def response_headers(self):
		header_data = value(self.data, RESPONSE, HEADER, HEADERS)
		headers = dict()
		for header in headers:
			headers[header[NAME]] = header[VALUE]
		return headers

By admin

Leave a Reply

Your email address will not be published.