86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
|
|
"""Purge Cloudflare cache for robots.txt on gfil-lab.com"""
|
||
|
|
import urllib.request, json, sys, io
|
||
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
|
||
|
|
|
||
|
|
# gfil-lab.com Cloudflare zone
|
||
|
|
CF_TOKEN = "cfut_xRDcVVOTE9hLWxe8fFUG1Xgv7aQVtV0ytWFYZKimffcc10e3"
|
||
|
|
# Need zone ID for gfil-lab.com - get it first
|
||
|
|
headers = {
|
||
|
|
"Authorization": "Bearer " + CF_TOKEN,
|
||
|
|
"Content-Type": "application/json"
|
||
|
|
}
|
||
|
|
|
||
|
|
# List zones to find gfil-lab.com zone ID
|
||
|
|
req = urllib.request.Request("https://api.cloudflare.com/client/v4/zones", headers=headers)
|
||
|
|
r = urllib.request.urlopen(req, timeout=15)
|
||
|
|
data = json.loads(r.read().decode())
|
||
|
|
for z in data.get("result", []):
|
||
|
|
print(f" Zone: {z['name']} -> ID: {z['id']}")
|
||
|
|
|
||
|
|
# Find gfil-lab.com zone
|
||
|
|
zone_id = None
|
||
|
|
for z in data.get("result", []):
|
||
|
|
if z["name"] == "gfil-lab.com":
|
||
|
|
zone_id = z["id"]
|
||
|
|
break
|
||
|
|
|
||
|
|
if not zone_id:
|
||
|
|
print("ERROR: gfil-lab.com zone not found")
|
||
|
|
sys.exit(1)
|
||
|
|
|
||
|
|
print(f"\nPurging cache for gfil-lab.com (zone: {zone_id})...")
|
||
|
|
|
||
|
|
# Purge specific URLs
|
||
|
|
purge_data = json.dumps({
|
||
|
|
"files": [
|
||
|
|
"https://gfil-lab.com/robots.txt",
|
||
|
|
"https://gfil-intel.xyz/robots.txt"
|
||
|
|
]
|
||
|
|
}).encode("utf-8")
|
||
|
|
|
||
|
|
req = urllib.request.Request(
|
||
|
|
f"https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache",
|
||
|
|
data=purge_data,
|
||
|
|
headers=headers,
|
||
|
|
method="POST"
|
||
|
|
)
|
||
|
|
r = urllib.request.urlopen(req, timeout=15)
|
||
|
|
result = json.loads(r.read().decode())
|
||
|
|
print(f" Purge result: {result.get('success', False)}")
|
||
|
|
|
||
|
|
# Also try gfil-intel.xyz zone
|
||
|
|
zone_id2 = None
|
||
|
|
for z in data.get("result", []):
|
||
|
|
if z["name"] == "gfil-intel.xyz":
|
||
|
|
zone_id2 = z["id"]
|
||
|
|
break
|
||
|
|
|
||
|
|
if zone_id2:
|
||
|
|
print(f"\nPurging cache for gfil-intel.xyz (zone: {zone_id2})...")
|
||
|
|
purge_data2 = json.dumps({"files": ["https://gfil-intel.xyz/robots.txt"]}).encode("utf-8")
|
||
|
|
req2 = urllib.request.Request(
|
||
|
|
f"https://api.cloudflare.com/client/v4/zones/{zone_id2}/purge_cache",
|
||
|
|
data=purge_data2,
|
||
|
|
headers=headers,
|
||
|
|
method="POST"
|
||
|
|
)
|
||
|
|
r2 = urllib.request.urlopen(req2, timeout=15)
|
||
|
|
result2 = json.loads(r2.read().decode())
|
||
|
|
print(f" Purge result: {result2.get('success', False)}")
|
||
|
|
|
||
|
|
# Wait and verify
|
||
|
|
import time
|
||
|
|
print("\nWaiting 3 seconds for cache purge...")
|
||
|
|
time.sleep(3)
|
||
|
|
|
||
|
|
print("\n=== Verification after purge ===")
|
||
|
|
import urllib.request as ur
|
||
|
|
for domain in ["gfil-lab.com", "gfil-intel.xyz"]:
|
||
|
|
try:
|
||
|
|
req = ur.Request("https://" + domain + "/robots.txt", headers={"User-Agent": "Mozilla/5.0", "Cache-Control": "no-cache"})
|
||
|
|
r = ur.urlopen(req, timeout=10)
|
||
|
|
content = r.read().decode()
|
||
|
|
print(f" {domain}: {r.status} | {len(content)} chars | GPTBot={'GPTBot' in content} | ClaudeBot={'ClaudeBot' in content}")
|
||
|
|
except Exception as e:
|
||
|
|
print(f" {domain}: {e}")
|