init
This commit is contained in:
60
rotate.ps1
Normal file
60
rotate.ps1
Normal file
@@ -0,0 +1,60 @@
|
||||
# ================= CONFIG =================
|
||||
$API_URL = "http://127.0.0.1:9090"
|
||||
$SECRET = "8130899"
|
||||
$GROUP = "Rotate"
|
||||
# ==========================================
|
||||
|
||||
# 1. Force UTF-8 Output
|
||||
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
||||
|
||||
Write-Host "1. Connecting to Clash..." -ForegroundColor Cyan
|
||||
|
||||
# Use WebClient (Stable & Fixes Encoding)
|
||||
$wc = New-Object System.Net.WebClient
|
||||
$wc.Encoding = [System.Text.Encoding]::UTF8
|
||||
|
||||
try {
|
||||
# URL
|
||||
$ListUrl = "$API_URL/proxies/$GROUP"
|
||||
|
||||
# === Step A: Get List ===
|
||||
# Add Auth Header
|
||||
if ($SECRET -ne "") { $wc.Headers.Add("Authorization", "Bearer $SECRET") }
|
||||
|
||||
$JsonContent = $wc.DownloadString($ListUrl)
|
||||
|
||||
$JsonObj = $JsonContent | ConvertFrom-Json
|
||||
$NodeList = $JsonObj.all
|
||||
|
||||
if (!$NodeList -or $NodeList.Count -eq 0) {
|
||||
throw "Error: Group [$GROUP] is empty!"
|
||||
}
|
||||
Write-Host " > Found $($NodeList.Count) nodes." -ForegroundColor Green
|
||||
|
||||
# === Step B: Pick Random ===
|
||||
$Target = $NodeList | Get-Random
|
||||
Write-Host "2. Switching to: $Target" -ForegroundColor Cyan
|
||||
|
||||
# === Step C: Send Switch Command ===
|
||||
$Payload = @{ name = $Target } | ConvertTo-Json -Compress
|
||||
|
||||
# 【Critical Fix】Clear headers to remove old Auth, preventing duplicate headers
|
||||
$wc.Headers.Clear()
|
||||
|
||||
# Re-add Headers correctly
|
||||
$wc.Headers.Add("Content-Type", "application/json")
|
||||
if ($SECRET -ne "") { $wc.Headers.Add("Authorization", "Bearer $SECRET") }
|
||||
|
||||
# Send PUT
|
||||
$Response = $wc.UploadString($ListUrl, "PUT", $Payload)
|
||||
|
||||
Write-Host "3. [SUCCESS] Switched to: $Target" -ForegroundColor Green
|
||||
|
||||
} catch {
|
||||
Write-Host "==== ERROR ====" -ForegroundColor Red
|
||||
Write-Host $_.Exception.Message -ForegroundColor Yellow
|
||||
if ($_.Exception.InnerException) {
|
||||
Write-Host "Detail: $($_.Exception.InnerException.Message)" -ForegroundColor Yellow
|
||||
}
|
||||
exit 1
|
||||
}
|
||||
Reference in New Issue
Block a user