AIstudioProxyAPI / scripts /fetch_camoufox_data.py
peijun1's picture
Deploy AI Studio Proxy API to Hugging Face Spaces
a5784e9
Raw
History Blame Contribute Delete
4.11 kB
import ssl
import sys
import traceback
# --- WARNING: THIS SCRIPT DISABLES SSL VERIFICATION --- #
# --- USE ONLY IF YOU TRUST YOUR NETWORK --- #
# --- AND `camoufox fetch` FAILS DUE TO SSL --- #
print("=" * 60)
print("WARNING: This script will temporarily disable SSL certificate verification")
print(" globally for this Python process to attempt fetching Camoufox data.")
print(" This can expose you to security risks like man-in-the-middle attacks.")
print("=" * 60)
confirm = (
input("Do you understand the risks and want to proceed? (yes/NO): ").strip().lower()
)
if confirm != "yes":
print("Operation cancelled by user.")
sys.exit(0)
print("\nAttempting to disable SSL verification...")
original_ssl_context = None
try:
# Store the original context creation function
if hasattr(ssl, "_create_default_https_context"):
original_ssl_context = ssl._create_default_https_context
# Get the unverified context creation function
_create_unverified_https_context = ssl._create_unverified_context
# Monkey patch the default context creation
ssl._create_default_https_context = _create_unverified_https_context
print("SSL verification temporarily disabled for this process.")
except AttributeError:
print(
"ERROR: Cannot disable SSL verification on this Python version (missing necessary SSL functions)."
)
sys.exit(1)
except Exception as e:
print(
f"ERROR: An unexpected error occurred while trying to disable SSL verification: {e}"
)
traceback.print_exc()
sys.exit(1)
# Now, try to import and run the fetch command logic from camoufox
print("\nAttempting to run Camoufox fetch logic...")
fetch_success = False
try:
# The exact way to trigger fetch programmatically might differ.
# This tries to import the CLI module and run the fetch command.
from camoufox import cli # type: ignore[attr-defined]
# Simulate command line arguments: ['fetch']
# Note: cli.cli() might exit the process directly on completion or error.
# We assume it might raise an exception or return normally.
cli.cli(["fetch"])
print("Camoufox fetch process seems to have completed.")
# We assume success if no exception was raised and the process didn't exit.
# A more robust check would involve verifying the downloaded files,
# but that's beyond the scope of this simple script.
fetch_success = True
except ImportError:
print(
"\nERROR: Could not import camoufox.cli. Make sure camoufox package is installed."
)
print(" Try running: pip show camoufox")
except FileNotFoundError as e:
print(f"\nERROR during fetch (FileNotFoundError): {e}")
print(
" This might indicate issues with file paths or permissions during download/extraction."
)
print(" Please check network connectivity and directory write permissions.")
except SystemExit as e:
# The CLI might use sys.exit(). We interpret non-zero exit codes as failure.
if e.code == 0:
print("Camoufox fetch process exited successfully (code 0).")
fetch_success = True
else:
print(f"\nERROR: Camoufox fetch process exited with error code: {e.code}")
except Exception as e:
print(f"\nERROR: An unexpected error occurred while running camoufox fetch: {e}")
traceback.print_exc()
finally:
# Attempt to restore the original SSL context
if original_ssl_context:
try:
ssl._create_default_https_context = original_ssl_context
print("\nOriginal SSL context restored.")
except Exception as restore_e:
print(f"\nWarning: Failed to restore original SSL context: {restore_e}")
else:
# If we couldn't store the original, we can't restore it.
# The effect was process-local anyway.
pass
if fetch_success:
print(
"\nFetch attempt finished. Please verify if Camoufox browser files were downloaded successfully."
)
else:
print("\nFetch attempt failed or exited with an error.")
print("Script finished.")