Draga proxy-IP og hex-gáttir úr innfelldu JSON
Afkóðaðu þekktar JSON-farmar úr skriftköllum proxýlista og túlkaðu hex-gátt aðeins þegar snið upprunans segir svo.
Tóm HTML-tafla þýðir ekki alltaf að svarið innihaldi engar proxýfærslur. Sumir listar setja JSON-hluti inn í JavaScript-köll og fylla raðirnar síðar.
Fyrir uppruna sem þegar hefur verið sóttur og notar sérstaka umbúðina gp.insertPrx og síðan JSON-hlut:
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 er texti upprunans, ekki vafrahlutur. Reglulega segðin finnur þekkta umbúð; JSONDecoder ákvarðar hvar JSON-gildinu lýkur. Þannig er forðast að reyna að þátta innfellt JSON með reglulegri segð einni saman.
Gáttarreitur dæmisins er bersýnilega hexadesímalkur: C38 þýðir 3128 í tugakerfi. Ekki beita grunntölunni 16 á tugakerfisreit annars þjónustuaðila bara vegna þess að báðir heita gátt.
Þetta er þáttari fyrir tilgreint snið, ekki JavaScript-túlkur. Hlutabókstafir í einföldum gæsalöppum, reiknuð gildi og aðrar JavaScript-segðir þurfa annað skjalfest gagnalið. Ekki keyra handahófskenndan síðukóða til að fá lista yfir endapunkta.
Staðfestu samning upprunans og haltu samskiptareglureitum aðskildum. Ef uppruninn hefur frekar fylltar HTML-raðir, notaðu endapunktaútdrátt eftir röðum í stað þessa JavaScript-umbúðaþáttara. Að draga út vistfang og gátt sannar ekki að endapunkturinn bjóði nú upp á nothæfa proxýþjónustu.