Boş HTML cədvəli həmişə cavabda proxy qeydi olmadığını bildirmir. Bəzi siyahılar JSON obyektlərini JavaScript çağırışlarının içinə qoyur və sətirləri sonra doldurur.

Əvvəlcədən əldə edilmiş mənbə gp.insertPrx xüsusi sarğısından və ardınca JSON obyektindən istifadə edirsə:

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 mənbə mətnidir, brauzer obyekti deyil. Requlyar ifadə tanınan sarğını tapır; JSONDecoder JSON dəyərinin harada bitdiyini müəyyən edir. Bu, iç-içə JSON-u yalnız requlyar ifadə ilə təhlil etməyə çalışmaqdan qaçmağa imkan verir.

Nümunədəki port sahəsi açıq şəkildə onaltılıqdır: C38 onluq 3128 deməkdir. Hər ikisi port adlandığı üçün başqa provayderin onluq sahəsinə 16 əsasını tətbiq etməyin.

Bu, göstərilən format üçün analizatordur, JavaScript tərcüməçisi deyil. Tək dırnaqlı obyekt literalları, hesablanmış dəyərlər və digər JavaScript ifadələri başqa sənədləşdirilmiş verilənlər interfeysi tələb edir. Endpoint siyahısı əldə etmək üçün ixtiyari səhifə kodunu icra etməyin.

Mənbə müqaviləsini yoxlayın və protokol sahələrini ayrıca saxlayın. Əvəzinə HTML sətirləri doldurulmuş mənbə üçün bu JavaScript sarğı analizatorundan deyil, sətir üzrə endpoint çıxarılması istifadə edin. Ünvan və port çıxarmaq endpointin hazırda istifadə edilə bilən proxy xidməti təklif etdiyini təsdiqləmir.

Əlaqəli məqalələr