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
|
||||
from random import random
|
||||
|
||||
import requests
|
||||
import httpx
|
||||
from pywidevine.cdm import Cdm
|
||||
from pywidevine.device import Device
|
||||
@ -7,6 +9,7 @@ from pywidevine.pssh import PSSH
|
||||
from pywidevine.remotecdm import RemoteCdm
|
||||
import yaml
|
||||
import os
|
||||
import random
|
||||
from colorama import Fore
|
||||
import re
|
||||
from . import CDM_Selector
|
||||
@ -76,6 +79,28 @@ def find_widevine_license(dictionary):
|
||||
elif isinstance(value, dict):
|
||||
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():
|
||||
cdm_choice = CDM_Selector.select_local_cdm()
|
||||
try:
|
||||
@ -119,6 +144,13 @@ def decrypt_local_cdm():
|
||||
exit(1)
|
||||
user_license_url = input("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()
|
||||
license_curl = load_license_curl()
|
||||
db_headers = license_curl.headers
|
||||
@ -129,7 +161,8 @@ def decrypt_local_cdm():
|
||||
url=user_license_url,
|
||||
headers=license_curl.headers,
|
||||
cookies=license_curl.cookies,
|
||||
data=cdm.service_certificate_challenge
|
||||
data=cdm.service_certificate_challenge,
|
||||
proxies=Proxy
|
||||
)
|
||||
try:
|
||||
cdm.set_service_certificate(session_id=session_id, certificate=service_certificate.content)
|
||||
@ -148,6 +181,7 @@ def decrypt_local_cdm():
|
||||
try:
|
||||
replace_widevine_challenge(license_curl.data, base64.b64encode(challenge).decode())
|
||||
lic_data = license_curl.data
|
||||
db_data = license_curl.data
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
@ -156,6 +190,7 @@ def decrypt_local_cdm():
|
||||
try:
|
||||
replace_widevine_challenge(license_curl.json_data, base64.b64encode(challenge).decode())
|
||||
json_data = license_curl.json_data
|
||||
db_data = license_curl.json_data
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
@ -166,7 +201,8 @@ def decrypt_local_cdm():
|
||||
headers=license_curl.headers,
|
||||
cookies=license_curl.cookies,
|
||||
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:
|
||||
print(f'{Fore.RED}An error occurred.\n\n{error}')
|
||||
@ -233,6 +269,13 @@ def decrypt_remote_cdm():
|
||||
exit(1)
|
||||
user_license_url = input("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()
|
||||
license_curl = load_license_curl()
|
||||
db_headers = license_curl.headers
|
||||
@ -243,7 +286,8 @@ def decrypt_remote_cdm():
|
||||
url=user_license_url,
|
||||
headers=license_curl.headers,
|
||||
cookies=license_curl.cookies,
|
||||
data=cdm.service_certificate_challenge
|
||||
data=cdm.service_certificate_challenge,
|
||||
proxies=Proxy
|
||||
)
|
||||
try:
|
||||
cdm.set_service_certificate(session_id=session_id, certificate=service_certificate.content)
|
||||
@ -257,11 +301,11 @@ def decrypt_remote_cdm():
|
||||
except Exception as error:
|
||||
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)
|
||||
db_data = challenge
|
||||
if license_curl.data:
|
||||
try:
|
||||
replace_widevine_challenge(license_curl.data, base64.b64encode(challenge).decode())
|
||||
lic_data = license_curl.data
|
||||
db_data = license_curl.data
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
@ -270,17 +314,21 @@ def decrypt_remote_cdm():
|
||||
try:
|
||||
replace_widevine_challenge(license_curl.json_data, base64.b64encode(challenge).decode())
|
||||
json_data = license_curl.json_data
|
||||
db_data = license_curl.json_data
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
json_data = None
|
||||
if json_data is None and lic_data is None:
|
||||
db_data = challenge
|
||||
try:
|
||||
license_response = httpx.post(
|
||||
url=user_license_url,
|
||||
headers=license_curl.headers,
|
||||
cookies=license_curl.cookies,
|
||||
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:
|
||||
print(f'{Fore.RED}An error occurred.\n\n{error}')
|
||||
|
@ -27,7 +27,8 @@ def check_if_config_exists():
|
||||
else:
|
||||
initial_config_data = {
|
||||
'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]: ')
|
||||
if create_input:
|
||||
|
Loading…
Reference in New Issue
Block a user