Кірістірілген JSON-нан прокси IP және hex порттарын шығару
Прокси тізімдерінің скрипт шақыруларынан белгілі JSON жүктемелерін декодтаңыз және hex портты тек дереккөз пішімі оны мәлімдегенде ғана түсіндіріңіз.
Бос HTML кестесі жауапта прокси жазбалары жоқ дегенді білдірмейді. Кейбір тізімдер JSON нысандарын JavaScript шақыруларының ішіне қойып, жолдарды кейінірек толтырады.
Бұрын алынған дереккөз gp.insertPrx арнайы қаптамасын және одан кейін 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 — дереккөз мәтіні, браузер нысаны емес. Тұрақты өрнек белгілі қаптаманы табады; JSONDecoder JSON мәнінің қайда бітетінін анықтайды. Осылайша кірістірілген JSON-ды тек тұрақты өрнекпен талдау әрекетінен аулақ боламыз.
Мысалдағы порт өрісі анық он алтылық: C38 ондық 3128 дегенді білдіреді. Екеуі де порт деп аталады деп, басқа провайдердің ондық өрісіне 16 негізін қолданбаңыз.
Бұл көрсетілген пішімге арналған талдағыш, JavaScript интерпретаторы емес. Жалғыз тырнақшадағы нысан литералдары, есептелген мәндер және басқа JavaScript өрнектері басқа құжатталған деректер интерфейсін қажет етеді. Endpoint тізімін алу үшін беттің еркін кодын орындамаңыз.
Дереккөз шартын тексеріп, протокол өрістерін бөлек ұстаңыз. Егер дереккөзде оның орнына толтырылған HTML жолдары болса, осы JavaScript қаптама талдағышының орнына жол бойынша endpoint шығаруды қолданыңыз. Мекенжай мен портты шығару endpoint қазір жарамды прокси қызметін ұсынады дегенді дәлелдемейді.