Ekstrak IP Proxy dan Port Hex dari JSON yang Disematkan
Dekode muatan JSON yang dikenal dari panggilan skrip daftar proxy dan tafsirkan port hex hanya ketika format sumber menyatakannya.
Tabel HTML kosong tidak selalu berarti respons tidak memuat catatan proxy. Beberapa daftar menaruh objek JSON di dalam panggilan JavaScript dan mengisi barisnya kemudian.
Untuk sumber yang sudah diperoleh dan memakai pembungkus khusus gp.insertPrx diikuti objek JSON:
import ipaddress
import json
import re
decoder = json.JSONDecoder()
endpoints = set()
for marker in re.finditer(r"gp[.]insertPrx\(\s*", html):
try:
row, end = decoder.raw_decode(html, marker.end())
if not isinstance(row, dict):
continue
address = ipaddress.ip_address(row["PROXY_IP"])
port = int(row["PROXY_PORT"], 16)
except (ValueError, KeyError, TypeError):
continue
if 1 <= port <= 65535 and html[end:].lstrip().startswith(");"):
endpoints.add((str(address), port))
html adalah teks sumber, bukan objek peramban. Ekspresi reguler menemukan pembungkus yang dikenal; JSONDecoder menentukan di mana nilai JSON berakhir. Ini menghindari upaya mengurai JSON bersarang hanya dengan ekspresi reguler.
Bidang port pada contoh secara eksplisit heksadesimal: C38 berarti 3128 desimal. Jangan terapkan basis 16 pada bidang desimal penyedia lain hanya karena keduanya disebut port.
Ini pengurai untuk format yang disebutkan, bukan juru bahasa JavaScript. Literal objek dengan kutip tunggal, nilai terhitung, dan ekspresi JavaScript lain memerlukan antarmuka data terdokumentasi lain. Jangan jalankan kode halaman sembarangan untuk mendapatkan daftar endpoint.
Validasi kontrak sumber dan simpan bidang protokol secara terpisah. Jika sumber justru memiliki baris HTML terisi, gunakan ekstraksi endpoint per baris alih-alih pengurai pembungkus JavaScript ini. Mengekstrak alamat dan port tidak membuktikan bahwa endpoint saat ini menawarkan layanan proxy yang dapat dipakai.