Get a Quote

List: Fmovies Proxy

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
    <title>Fmovies Proxy List | Updated Working Mirrors</title>
    <style>
        * 
            margin: 0;
            padding: 0;
            box-sizing: border-box;
    body 
        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        background: #0a0f1e;
        color: #eef2ff;
        padding: 20px;
        line-height: 1.5;
.container 
        max-width: 1300px;
        margin: 0 auto;
/* Header */
    .header 
        text-align: center;
        margin-bottom: 30px;
        padding: 20px;
        background: linear-gradient(135deg, #1a1f2e, #0f1422);
        border-radius: 28px;
        box-shadow: 0 8px 20px rgba(0,0,0,0.3);
.header h1 
        font-size: 2rem;
        background: linear-gradient(135deg, #f5b042, #ff6b6b);
        -webkit-background-clip: text;
        background-clip: text;
        color: transparent;
        margin-bottom: 8px;
.header p 
        color: #9aa4bf;
        font-size: 0.95rem;
.last-updated 
        font-size: 0.8rem;
        margin-top: 12px;
        background: #1e2438;
        display: inline-block;
        padding: 6px 14px;
        border-radius: 40px;
/* Controls */
    .controls 
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
        align-items: center;
        gap: 15px;
        margin-bottom: 28px;
        background: #111624;
        padding: 15px 20px;
        border-radius: 24px;
.search-box 
        flex: 2;
        min-width: 200px;
.search-box input 
        width: 100%;
        padding: 12px 18px;
        border-radius: 40px;
        border: none;
        background: #1e253e;
        color: white;
        font-size: 1rem;
        outline: none;
        transition: 0.2s;
.search-box input:focus 
        background: #2a324f;
        box-shadow: 0 0 0 2px #f5b042;
.status-filter 
        display: flex;
        gap: 12px;
        flex-wrap: wrap;
.filter-btn 
        background: #1e253e;
        border: none;
        padding: 8px 18px;
        border-radius: 40px;
        color: #ccd6f0;
        cursor: pointer;
        font-weight: 500;
        transition: 0.2s;
.filter-btn.active 
        background: #f5b042;
        color: #0a0f1e;
.refresh-btn 
        background: #2d374b;
        border: none;
        padding: 8px 20px;
        border-radius: 40px;
        color: white;
        cursor: pointer;
        font-weight: bold;
        display: flex;
        align-items: center;
        gap: 8px;
.refresh-btn:hover 
        background: #f5b042;
        color: #0a0f1e;
/* Proxy Table/Cards */
    .proxy-grid 
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
        gap: 20px;
.proxy-card 
        background: #111624;
        border-radius: 24px;
        padding: 20px;
        transition: transform 0.2s, box-shadow 0.2s;
        border: 1px solid #262e44;
.proxy-card:hover 
        transform: translateY(-4px);
        box-shadow: 0 12px 24px rgba(0,0,0,0.4);
        border-color: #f5b04270;
.proxy-name 
        font-size: 1.4rem;
        font-weight: bold;
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-bottom: 12px;
.status-badge 
        font-size: 0.7rem;
        padding: 4px 10px;
        border-radius: 30px;
        font-weight: normal;
.status-online 
        background: #10b981;
        color: white;
.status-offline 
        background: #ef4444;
        color: white;
.status-checking 
        background: #f59e0b;
        color: #1e1e2a;
.proxy-url 
        font-family: monospace;
        font-size: 0.85rem;
        background: #0b0f18;
        padding: 8px 10px;
        border-radius: 14px;
        word-break: break-all;
        margin: 12px 0;
        color: #b9c3e9;
.proxy-meta 
        display: flex;
        gap: 12px;
        font-size: 0.75rem;
        color: #8f9bb3;
        margin-bottom: 16px;
.card-buttons 
        display: flex;
        gap: 12px;
        margin-top: 8px;
.btn 
        flex: 1;
        text-align: center;
        padding: 8px 12px;
        border-radius: 40px;
        text-decoration: none;
        font-weight: 600;
        font-size: 0.85rem;
        transition: 0.2s;
        cursor: pointer;
        border: none;
.btn-visit 
        background: #f5b042;
        color: #0a0f1e;
.btn-visit:hover 
        background: #ff9f2c;
.btn-copy 
        background: #2d374b;
        color: white;
.btn-copy:hover 
        background: #3e4a66;
.footer-note 
        text-align: center;
        margin-top: 40px;
        font-size: 0.75rem;
        color: #6a7390;
        border-top: 1px solid #1e2438;
        padding-top: 24px;
@media (max-width: 700px) 
        body 
            padding: 12px;
.proxy-name 
            font-size: 1.2rem;
.loader-small 
        display: inline-block;
        width: 14px;
        height: 14px;
        border: 2px solid rgba(255,255,255,0.3);
        border-radius: 50%;
        border-top-color: white;
        animation: spin 0.8s linear infinite;
@keyframes spin 
        to  transform: rotate(360deg);
</style>

</head> <body>

<div class="container"> <div class="header"> <h1>🎬 Fmovies Proxy List</h1> <p>Working mirrors & proxies — updated and checked regularly</p> <div class="last-updated" id="lastUpdatedDisplay">Last check: --</div> </div>

<div class="controls">
    <div class="search-box">
        <input type="text" id="searchInput" placeholder="🔍 Search proxy name or URL...">
    </div>
    <div class="status-filter">
        <button class="filter-btn active" data-filter="all">All</button>
        <button class="filter-btn" data-filter="online">Online</button>
        <button class="filter-btn" data-filter="offline">Offline</button>
    </div>
    <button class="refresh-btn" id="refreshBtn">🔄 Check Status</button>
</div>
<div id="proxyContainer" class="proxy-grid">
    <!-- Cards will be injected here -->
    <div style="text-align: center; grid-column: 1/-1; padding: 40px;">Loading proxies...</div>
</div>
<div class="footer-note">
    ⚠️ Proxies are third-party services. Status may change. Always use at your own discretion.
</div>

</div>

<script> // ---------- PROXY DATABASE (predefined + editable) ---------- const proxyDatabase = [ id: 1, name: "Fmovies Mirror 1", url: "https://fmovies24.to", region: "EU", status: "unknown" , id: 2, name: "Fmovies Proxy (MX)", url: "https://fmoviesz.to", region: "NA", status: "unknown" , id: 3, name: "FMovie Hub", url: "https://fmovies.se", region: "Global", status: "unknown" , id: 4, name: "Fmovies Fast", url: "https://fmovie.cc", region: "AS", status: "unknown" , id: 5, name: "Mirror - FM Plus", url: "https://fmovieshd.vip", region: "EU", status: "unknown" , id: 6, name: "Fmovies Unblock", url: "https://fmovies.wtf", region: "NA", status: "unknown" , id: 7, name: "CineProxy", url: "https://fmovies.llc", region: "Global", status: "unknown" , id: 8, name: "Flixtor Mirror", url: "https://fmoviesz.llc", region: "EU", status: "unknown" , id: 9, name: "Fm Proxy New", url: "https://fmovies4free.com", region: "AS", status: "unknown" , id: 10, name: "FMovies alt", url: "https://fmovies.sx", region: "NA", status: "unknown" ];

let proxies = [...proxyDatabase];   // working copy with dynamic status
let currentFilter = "all";
let searchTerm = "";
// Helper: update last updated time
function updateLastUpdatedTime() 
    const now = new Date();
    const formatted = now.toLocaleString();
    document.getElementById("lastUpdatedDisplay").innerHTML = `🕒 Last check: $formatted`;
// CORS proxy status check (using free CORS Anywhere demo, or fetch with mode no-cors? but we need response)
// We'll use a public CORS proxy to ping each URL (head request) to avoid timeout issues.
// For reliability, we use a cors-anywhere demo or use a direct fetch with timeout & fallback.
// Because browsers block cross-origin, we use a helper (cors proxy). For production, consider own backend.
// Here we use "https://cors-anywhere.herokuapp.com/" as demo, but it has rate limits.
// Alternative: fetch via 'https://api.allorigins.win/raw?url=' but slower.
// We'll implement a lightweight check using a timeout and no-cors? Not accurate. Use cors proxy with error handling.
const CORS_PROXY = "https://cors-anywhere.herokuapp.com/"; // May require demo allowance, but fine for feature.
// To make more robust without proxy: check via image loading? Not good. We'll do a fetch with mode 'no-cors' -> limited but can detect offline if fails.
// Better: Use a simple fetch with timeout and signal, but cors will block. For feature demonstration, we check via HEAD request using a free public proxy.
// Some proxies might fail due to CORS, but we include fallback as 'unknown'.
async function checkProxyStatus(proxyUrl) 
    // Timeout after 7 seconds
    const controller = new AbortController();
    const timeoutId = setTimeout(() => controller.abort(), 7000);
// Try via CORS proxy first to get real status
    const proxiedUrl = CORS_PROXY + proxyUrl;
    try 
        const response = await fetch(proxiedUrl, 
            method: 'HEAD',
            signal: controller.signal,
            mode: 'cors',
            cache: 'no-store'
        );
        clearTimeout(timeoutId);
        if (response.ok  catch (error) 
        clearTimeout(timeoutId);
        // Fallback: try direct fetch with no-cors (won't give status but might not throw)
        try 
            const fallbackFetch = await fetch(proxyUrl,  method: 'HEAD', mode: 'no-cors', signal: AbortSignal.timeout?.(5000) : undefined );
            // no-cors returns opaque response, status is 0 but we assume maybe online? Not reliable.
            return 'unknown';
         catch (e) 
            return 'offline';
// Update all proxy statuses
async function refreshAllStatuses() 
    // Set all to 'checking' temporarily
    proxies = proxies.map(p => ( ...p, status: 'checking' ));
    renderProxyList();
const statusChecks = proxies.map(async (proxy, index) => 
        const status = await checkProxyStatus(proxy.url);
        proxies[index].status = status;
    );
await Promise.allSettled(statusChecks);
    updateLastUpdatedTime();
    renderProxyList();
// Filter & search logic
function getFilteredProxies() 
    let filtered = [...proxies];
// Search by name or URL
    if (searchTerm.trim() !== "")
// Status filter
    if (currentFilter !== "all") 
        filtered = filtered.filter(p => p.status === currentFilter);
return filtered;
// Render proxy cards
function renderProxyList() 
    const container = document.getElementById("proxyContainer");
    const filtered = getFilteredProxies();
if (filtered.length === 0) 
        container.innerHTML = `<div style="grid-column:1/-1; text-align:center; padding:40px;">🔍 No proxies match your criteria.</div>`;
        return;
const cardsHTML = filtered.map(proxy => 
        let statusClass = "status-offline";
        let statusText = "Offline";
        if (proxy.status === 'online') 
            statusClass = "status-online";
            statusText = "Online";
         else if (proxy.status === 'checking') 
            statusClass = "status-checking";
            statusText = "Checking...";
         else if (proxy.status === 'unknown') 
            statusClass = "status-checking";
            statusText = "Unknown";
// Truncate URL display
        const displayUrl = proxy.url.length > 45 ? proxy.url.substring(0, 42) + "..." : proxy.url;
return `
            <div class="proxy-card" data-id="$proxy.id">
                <div class="proxy-name">
                    $escapeHtml(proxy.name)
                    <span class="status-badge $statusClass">$statusText</span>
                </div>
                <div class="proxy-url" title="$proxy.url">$escapeHtml(displayUrl)</div>
                <div class="proxy-meta">
                    <span>🌍 $proxy.region</span>
                    <span>🆔 #$proxy.id</span>
                </div>
                <div class="card-buttons">
                    <a href="$proxy.url" target="_blank" rel="noopener noreferrer" class="btn btn-visit">🌐 Visit</a>
                    <button class="btn btn-copy" data-url="$proxy.url">📋 Copy URL</button>
                </div>
            </div>
        `;
    ).join('');
container.innerHTML = cardsHTML;
// Attach copy event listeners after render
    document.querySelectorAll('.btn-copy').forEach(btn => 
        btn.addEventListener('click', (e) => 
            const url = btn.getAttribute('data-url');
            copyToClipboard(url);
            // temporary feedback
            const originalText = btn.innerText;
            btn.innerText = "✅ Copied!";
            setTimeout(() =>  btn.innerText = originalText; , 1500);
        );
    );
// Helper: copy to clipboard
async function copyToClipboard(text) 
    try 
        await navigator.clipboard.writeText(text);
     catch (err) 
        alert("Manual copy: " + text);
// Simple escape to avoid XSS
function escapeHtml(str) 
    return str.replace(/[&<>]/g, function(m) 
        if (m === '&') return '&';
        if (m === '<') return '<';
        if (m === '>') return '>';
        return m;
    ).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(c) 
        return c;
    );
// Event listeners
function init() 
    renderProxyList();
// Search input
    const searchInput = document.getElementById("searchInput");
    searchInput.addEventListener("input", (e) => 
        searchTerm = e.target.value;
        renderProxyList();
    );
// Filter buttons
    const filterBtns = document.querySelectorAll(".filter-btn");
    filterBtns.forEach(btn => 
        btn.addEventListener("click", () => 
            filterBtns.forEach(b => b.classList.remove("active"));
            btn.classList.add("active");
            currentFilter = btn.getAttribute("data-filter");
            renderProxyList();
        );
    );
// Refresh button
    const refreshBtn = document.getElementById("refreshBtn");
    refreshBtn.addEventListener("click", async () => 
        refreshBtn.innerHTML = "⏳ Checking...";
        await refreshAllStatuses();
        refreshBtn.innerHTML = "🔄 Check Status";
    );
// Auto-check status on load after 0.5s
    setTimeout(() => 
        refreshAllStatuses().catch(console.warn);
    , 500);
updateLastUpdatedTime();
init();

</script> </body> </html>


Legitimate Fmovies proxies stream content directly. If a site asks you to download a video player or "codec," close it immediately. Fmovies Proxy List

The cycle is predictable:

This cat-and-mouse game means any static Fmovies proxy list becomes outdated within weeks. As of 2026, anti-piracy organizations now use automated bots to crawl for new proxies the moment they're indexed by Google. name: "Fmovies Mirror 1"

This is the grayest area of streaming.

Realistic Advice: You will almost certainly not be sued for using a proxy. But your ISP may send you warning notices. Using the proxy list without a VPN leaves a digital footprint. name: "Fmovies Proxy (MX)"