Toa IP za proksi na bandari za hex kutoka JSON iliyoingizwa
Dekodi mizigo ya JSON inayojulikana kutoka kwa miito ya hati za orodha za proksi na tafsiri bandari ya hex tu wakati muundo wa chanzo unasema hivyo.
Jedwali tupu la HTML haimaanishi kila wakati kuwa jibu halina rekodi za proksi. Baadhi ya orodha huweka vitu vya JSON ndani ya miito ya JavaScript na kujaza safu baadaye.
Kwa chanzo kilichopatikana tayari kinachotumia kifungo maalum gp.insertPrx kikifuatiwa na kitu cha 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 ni maandishi ya chanzo, si kitu cha kivinjari. Usemi wa kawaida hupata kifungo kinachojulikana; JSONDecoder huamua thamani ya JSON inapoishia. Hii inaepuka jaribio la kuchanganua JSON iliyopangwa ndani kwa usemi wa kawaida pekee.
Sehemu ya bandari katika mfano ni hexadecimals waziwazi: C38 inamaanisha 3128 ya desimali. Usitumie msingi 16 kwenye sehemu ya desimali ya mtoa huduma mwingine kwa sababu tu zote zinaitwa bandari.
Hiki ni kichanganuzi cha muundo uliotajwa, si mkalimani wa JavaScript. Maandishi ya vitu yenye alama moja ya nukuu, thamani zilizohesabiwa na misemo mingine ya JavaScript huhitaji kiolesura kingine cha data kilichoandikwa. Usitekeleze msimbo wa ukurasa holela ili kupata orodha ya vituo.
Thibitisha mkataba wa chanzo na uweke sehemu za itifaki kando. Ikiwa chanzo kina safu za HTML zilizojazwa badala yake, tumia uchimbaji wa vituo kwa safu badala ya kichanganuzi hiki cha kifungo cha JavaScript. Kutoa anwani na bandari hakuthibitishi kuwa kituo kinatoa huduma ya proksi inayoweza kutumika kwa sasa.