# coding: utf-8

# Установка модуля и обновление зависимостей.
# python3 -m pip install requests
# pip3 install urllib3==1.25

# https://docs.python-requests.org/en/latest/
# Запуск скрипта python3 request.py

import requests
import json
# from http.client import responses # Библиотека для вывода сообщений для кодов.
import warnings # Библиотека для обработки предупреждений.

# Отключение предупреждений связанных с HTTPS.
warnings.filterwarnings('ignore', message='Unverified HTTPS request')

# Список используемых протоколов.
protocolData = {10: 'HTTP/1.0', 11: 'HTTP/1.1'}

# Список известных ошибок.
responseCode = {
    200: 'HTTP/1.1 200 OK',
    301: 'HTTP/1.1 301 Moved Permanently',
    302: 'HTTP/1.1 302 Found',
    401: 'HTTP/1.1 401 Unauthorized',
    403: 'HTTP/1.1 403 Forbidden',
    404: 'HTTP/1.1 404 Not Found',
    502: 'HTTP/1.1 502 Bad Gateway',
    503: 'HTTP/1.1 503 Service Temporarily Unavailable'
}

from sys import argv

script, dataJson = argv

# Настройки.
configData = {"url": "", "proxy": "", "auth": "", "headers": "",  "cookies": "", "timeout": "", "returnHeaders": "", "returnBody": ""}

arrData = json.loads(dataJson)

for key in arrData:
	configData[key] = arrData[key]

# Проверка и установка настроек.
url = ''
proxy = ''
auth = ''
headers = {}
cookies = {}
timeout = 30
returnHeaders = 1
returnBody = 1
	
if configData["url"] != '':
	url = configData["url"]
else:
	print("Error URL.")
	exit()
	
if configData["proxy"] != '':
	proxy = configData["proxy"]
else:
	print("Error proxy.")
	exit()
	
if configData["auth"] != '':
	auth = configData["auth"]
else:
	print("Error proxy auth.")
	exit()
	
if configData["headers"] != '':
	headers = configData["headers"]
    
if configData["cookies"] != '':
	cookies = json.loads(configData["cookies"])  
	
if configData["timeout"] != '':
	timeout = configData["timeout"]
	
if configData["returnHeaders"] != '':
	returnHeaders = configData["returnHeaders"]
    
if configData["returnBody"] != '':
    returnBody = configData["returnBody"]
    
answer = {}
answer['header'] = '' # Заголовок ответа.
answer['body'] = '' # Тело ответа.
answer['error'] = '' # Ошибка.     
typeContent = 1 # Тип полученного контента.

try:
    page = requests.get(url, headers=headers, cookies=cookies, proxies={'https' : "https://"+auth+"@"+proxy}, verify=False, timeout=timeout, allow_redirects=False)

    # Разбор заголовка.
    for key in page.headers:
        if key == 'content-type':
            if page.headers[key] == 'application/json':
                typeContent = 2
        answer['header'] += key+": "+page.headers[key]+"\n"
    
    # Вывод кода ответа и заголовка.
    if returnHeaders == 1:
        answer['header'] = responseCode[page.status_code]+answer['header']
        
    # Вывод тела ответа.
    if returnBody == 1: 
        if typeContent == 1:
            answer['body'] = page.content
        elif typeContent == 2:
            answer['body'] = page.text
except requests.exceptions.RequestException as e:
    answer['error'] = e
finally:
    print(json.dumps(answer))