Iġbor IP tal-proxy u portijiet hex mill-JSON inkorporat
Iddekodifika tagħbijiet JSON magħrufa mis-sejħiet tal-iskript tal-listi tal-proxy u interpreta port hex biss meta l-format tas-sors jiddikjara dan.
Tabella HTML vojta mhijiex dejjem tfisser li r-risposta ma fihiex rekords tal-proxy. Xi listi jqiegħdu oġġetti JSON ġewwa sejħiet JavaScript u jimlew ir-ringieli aktar tard.
Għal sors diġà miksub li juża l-wrapper speċifiku gp.insertPrx segwit minn oġġett 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 huwa t-test tas-sors, mhux oġġett tal-browser. L-espressjoni regolari ssib wrapper magħruf; JSONDecoder jiddetermina fejn jispiċċa l-valur JSON tiegħu. Hekk tiġi evitata t-tentattiva li JSON inkorporat jiġi analizzat bl-espressjoni regolari biss.
Il-qasam tal-port fl-eżempju huwa b'mod espliċitu hexadeċimali: C38 ifisser 3128 deċimali. Tapplikax il-bażi 16 għal qasam deċimali ta' fornitur ieħor sempliċement għax it-tnejn jissejħu port.
Dan huwa parser għall-format imsemmi, mhux interpretu JavaScript. Il-litterali tal-oġġetti b'virgoletti singoli, il-valuri kkalkulati u espressjonijiet JavaScript oħra jeħtieġu interface tad-dejta dokumentata oħra. Tħaddimx kodiċi tal-paġna arbitrarju biex tikseb lista ta' endpoints.
Ivvalida l-kuntratt tas-sors u żomm l-oqsma tal-protokoll separatament. Jekk is-sors minflok għandu ringieli HTML mimlija, uża estrazzjoni ta' endpoints skont ir-ringiela minflok dan il-parser tal-wrapper JavaScript. L-estrazzjoni ta' indirizz u port ma tippruvax li l-endpoint bħalissa joffri servizz tal-proxy użabbli.