Added proxy support
- Added automatic proxy support via proxyscrape API
This commit is contained in:
parent
84ae841f99
commit
9e99bec0f1
@ -1,5 +1,7 @@
|
|||||||
import base64
|
import base64
|
||||||
|
from random import random
|
||||||
|
|
||||||
|
import requests
|
||||||
import httpx
|
import httpx
|
||||||
from pywidevine.cdm import Cdm
|
from pywidevine.cdm import Cdm
|
||||||
from pywidevine.device import Device
|
from pywidevine.device import Device
|
||||||
@ -7,6 +9,7 @@ from pywidevine.pssh import PSSH
|
|||||||
from pywidevine.remotecdm import RemoteCdm
|
from pywidevine.remotecdm import RemoteCdm
|
||||||
import yaml
|
import yaml
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
from colorama import Fore
|
from colorama import Fore
|
||||||
import re
|
import re
|
||||||
from . import CDM_Selector
|
from . import CDM_Selector
|
||||||
@ -76,6 +79,28 @@ def find_widevine_license(dictionary):
|
|||||||
elif isinstance(value, dict):
|
elif isinstance(value, dict):
|
||||||
find_widevine_license(value)
|
find_widevine_license(value)
|
||||||
|
|
||||||
|
def get_proxy(country_code):
|
||||||
|
params = {
|
||||||
|
'request': 'displayproxies',
|
||||||
|
'protocol': 'http',
|
||||||
|
'timeout': '10000',
|
||||||
|
'country': f'{country_code}',
|
||||||
|
'ssl': 'all',
|
||||||
|
'anonymity': 'all',
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.get('https://api.proxyscrape.com/v2/', params=params)
|
||||||
|
|
||||||
|
lines = response.text.splitlines()
|
||||||
|
random_line = random.choice(lines)
|
||||||
|
|
||||||
|
proxies = {
|
||||||
|
'http://': f'http://{random_line}',
|
||||||
|
'https://': f'http://{random_line}'
|
||||||
|
}
|
||||||
|
|
||||||
|
return proxies
|
||||||
|
|
||||||
def decrypt_local_cdm():
|
def decrypt_local_cdm():
|
||||||
cdm_choice = CDM_Selector.select_local_cdm()
|
cdm_choice = CDM_Selector.select_local_cdm()
|
||||||
try:
|
try:
|
||||||
@ -119,6 +144,13 @@ def decrypt_local_cdm():
|
|||||||
exit(1)
|
exit(1)
|
||||||
user_license_url = input("License URL: ")
|
user_license_url = input("License URL: ")
|
||||||
db_url = user_license_url
|
db_url = user_license_url
|
||||||
|
Proxy = None
|
||||||
|
with open('Config.yaml', 'r') as ymlfile:
|
||||||
|
config = yaml.safe_load(ymlfile)
|
||||||
|
if 'Proxy' in config:
|
||||||
|
if len(config['Proxy']) == 2:
|
||||||
|
Proxy = get_proxy(config['Proxy'])
|
||||||
|
print(f'Using Proxy {Proxy}')
|
||||||
print()
|
print()
|
||||||
license_curl = load_license_curl()
|
license_curl = load_license_curl()
|
||||||
db_headers = license_curl.headers
|
db_headers = license_curl.headers
|
||||||
@ -129,7 +161,8 @@ def decrypt_local_cdm():
|
|||||||
url=user_license_url,
|
url=user_license_url,
|
||||||
headers=license_curl.headers,
|
headers=license_curl.headers,
|
||||||
cookies=license_curl.cookies,
|
cookies=license_curl.cookies,
|
||||||
data=cdm.service_certificate_challenge
|
data=cdm.service_certificate_challenge,
|
||||||
|
proxies=Proxy
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
cdm.set_service_certificate(session_id=session_id, certificate=service_certificate.content)
|
cdm.set_service_certificate(session_id=session_id, certificate=service_certificate.content)
|
||||||
@ -148,6 +181,7 @@ def decrypt_local_cdm():
|
|||||||
try:
|
try:
|
||||||
replace_widevine_challenge(license_curl.data, base64.b64encode(challenge).decode())
|
replace_widevine_challenge(license_curl.data, base64.b64encode(challenge).decode())
|
||||||
lic_data = license_curl.data
|
lic_data = license_curl.data
|
||||||
|
db_data = license_curl.data
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
@ -156,6 +190,7 @@ def decrypt_local_cdm():
|
|||||||
try:
|
try:
|
||||||
replace_widevine_challenge(license_curl.json_data, base64.b64encode(challenge).decode())
|
replace_widevine_challenge(license_curl.json_data, base64.b64encode(challenge).decode())
|
||||||
json_data = license_curl.json_data
|
json_data = license_curl.json_data
|
||||||
|
db_data = license_curl.json_data
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
@ -166,7 +201,8 @@ def decrypt_local_cdm():
|
|||||||
headers=license_curl.headers,
|
headers=license_curl.headers,
|
||||||
cookies=license_curl.cookies,
|
cookies=license_curl.cookies,
|
||||||
json=json_data,
|
json=json_data,
|
||||||
data=challenge if json_data is None and lic_data is None else lic_data
|
data=challenge if json_data is None and lic_data is None else lic_data,
|
||||||
|
proxies=Proxy
|
||||||
)
|
)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
print(f'{Fore.RED}An error occurred.\n\n{error}')
|
print(f'{Fore.RED}An error occurred.\n\n{error}')
|
||||||
@ -233,6 +269,13 @@ def decrypt_remote_cdm():
|
|||||||
exit(1)
|
exit(1)
|
||||||
user_license_url = input("License URL: ")
|
user_license_url = input("License URL: ")
|
||||||
db_url = user_license_url
|
db_url = user_license_url
|
||||||
|
Proxy = None
|
||||||
|
with open('Config.yaml', 'r') as ymlfile:
|
||||||
|
config = yaml.safe_load(ymlfile)
|
||||||
|
if 'Proxy' in config:
|
||||||
|
if len(config['Proxy']) == 2:
|
||||||
|
Proxy = get_proxy(config['Proxy'])
|
||||||
|
print(f'Using Proxy {Proxy}')
|
||||||
print()
|
print()
|
||||||
license_curl = load_license_curl()
|
license_curl = load_license_curl()
|
||||||
db_headers = license_curl.headers
|
db_headers = license_curl.headers
|
||||||
@ -243,7 +286,8 @@ def decrypt_remote_cdm():
|
|||||||
url=user_license_url,
|
url=user_license_url,
|
||||||
headers=license_curl.headers,
|
headers=license_curl.headers,
|
||||||
cookies=license_curl.cookies,
|
cookies=license_curl.cookies,
|
||||||
data=cdm.service_certificate_challenge
|
data=cdm.service_certificate_challenge,
|
||||||
|
proxies=Proxy
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
cdm.set_service_certificate(session_id=session_id, certificate=service_certificate.content)
|
cdm.set_service_certificate(session_id=session_id, certificate=service_certificate.content)
|
||||||
@ -257,11 +301,11 @@ def decrypt_remote_cdm():
|
|||||||
except Exception as error:
|
except Exception as error:
|
||||||
print(f'{Fore.RED}An error occurred.\n\n{error}\n\nTrying without service certificate')
|
print(f'{Fore.RED}An error occurred.\n\n{error}\n\nTrying without service certificate')
|
||||||
challenge = cdm.get_license_challenge(session_id=session_id, pssh=pssh, privacy_mode=set_service_certificate_success)
|
challenge = cdm.get_license_challenge(session_id=session_id, pssh=pssh, privacy_mode=set_service_certificate_success)
|
||||||
db_data = challenge
|
|
||||||
if license_curl.data:
|
if license_curl.data:
|
||||||
try:
|
try:
|
||||||
replace_widevine_challenge(license_curl.data, base64.b64encode(challenge).decode())
|
replace_widevine_challenge(license_curl.data, base64.b64encode(challenge).decode())
|
||||||
lic_data = license_curl.data
|
lic_data = license_curl.data
|
||||||
|
db_data = license_curl.data
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
@ -270,17 +314,21 @@ def decrypt_remote_cdm():
|
|||||||
try:
|
try:
|
||||||
replace_widevine_challenge(license_curl.json_data, base64.b64encode(challenge).decode())
|
replace_widevine_challenge(license_curl.json_data, base64.b64encode(challenge).decode())
|
||||||
json_data = license_curl.json_data
|
json_data = license_curl.json_data
|
||||||
|
db_data = license_curl.json_data
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
json_data = None
|
json_data = None
|
||||||
|
if json_data is None and lic_data is None:
|
||||||
|
db_data = challenge
|
||||||
try:
|
try:
|
||||||
license_response = httpx.post(
|
license_response = httpx.post(
|
||||||
url=user_license_url,
|
url=user_license_url,
|
||||||
headers=license_curl.headers,
|
headers=license_curl.headers,
|
||||||
cookies=license_curl.cookies,
|
cookies=license_curl.cookies,
|
||||||
json=json_data,
|
json=json_data,
|
||||||
data=challenge if json_data is None and lic_data is None else lic_data
|
data=challenge if json_data is None and lic_data is None else lic_data,
|
||||||
|
proxies=Proxy
|
||||||
)
|
)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
print(f'{Fore.RED}An error occurred.\n\n{error}')
|
print(f'{Fore.RED}An error occurred.\n\n{error}')
|
||||||
|
@ -27,7 +27,8 @@ def check_if_config_exists():
|
|||||||
else:
|
else:
|
||||||
initial_config_data = {
|
initial_config_data = {
|
||||||
'First_Run': 'True',
|
'First_Run': 'True',
|
||||||
'Remote_CDM_API_FQDN': 'http://127.0.0.1:5000'
|
'Remote_CDM_API_FQDN': 'http://127.0.0.1:5000',
|
||||||
|
'Proxy': 'US'
|
||||||
}
|
}
|
||||||
create_input = input(f'\n{Fore.YELLOW}Config.yaml not found, would you like to create a Config.yaml? [(Y)es/(N)o]: ')
|
create_input = input(f'\n{Fore.YELLOW}Config.yaml not found, would you like to create a Config.yaml? [(Y)es/(N)o]: ')
|
||||||
if create_input:
|
if create_input:
|
||||||
|
Loading…
Reference in New Issue
Block a user