Nxirr IP-të e proxy-t dhe portat hex nga JSON i integruar
Dekodoni ngarkesat e njohura JSON nga thirrjet e skriptit të listave të proxy-t dhe interpretoni një portë hex vetëm kur formati i burimit e deklaron atë.
Një tabelë HTML bosh nuk do të thotë gjithmonë se përgjigja nuk përmban regjistrime proxy. Disa lista vendosin objekte JSON brenda thirrjeve JavaScript dhe i mbushin rreshtat më vonë.
Për një burim të marrë më parë që përdor mbështjellësin specifik gp.insertPrx të ndjekur nga një objekt 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 është teksti i burimit, jo një objekt shfletuesi. Shprehja e rregullt gjen një mbështjellës të njohur; JSONDecoder përcakton ku përfundon vlera JSON. Kështu shmanget përpjekja për të analizuar JSON të ndërlidhur vetëm me një shprehje të rregullt.
Fusha e portës në shembull është shprehimisht hexadecimale: C38 do të thotë 3128 dhjetore. Mos e zbato bazën 16 në fushën dhjetore të një ofruesi tjetër vetëm sepse të dy quhen portë.
Ky është një analizues për formatin e deklaruar, jo një interpretues JavaScript. Literalet e objekteve me thonjëza të vetme, vlerat e llogaritura dhe shprehjet e tjera JavaScript kërkojnë një ndërfaqe tjetër të dokumentuar të të dhënave. Mos ekzekutoni kod arbitrari faqeje për të marrë një listë pikash fundore.
Vërtetoni kontratën e burimit dhe mbajini fushat e protokollit veçmas. Nëse burimi ka në vend të kësaj rreshta HTML të mbushur, përdorni nxjerrjen e pikave fundore sipas rreshtit në vend të këtij analizuesi të mbështjellësit JavaScript. Nxjerrja e një adrese dhe porte nuk vërteton se pika fundore ofron aktualisht një shërbim proxy të përdorshëm.