ਖਾਲੀ HTML ਟੇਬਲ ਦਾ ਮਤਲਬ ਹਮੇਸ਼ਾ ਇਹ ਨਹੀਂ ਹੁੰਦਾ ਕਿ ਜਵਾਬ ਵਿੱਚ ਕੋਈ ਪ੍ਰੌਕਸੀ ਰਿਕਾਰਡ ਨਹੀਂ। ਕੁਝ ਸੂਚੀਆਂ JavaScript ਕਾਲਾਂ ਦੇ ਅੰਦਰ JSON ਵਸਤੂਆਂ ਰੱਖਦੀਆਂ ਹਨ ਅਤੇ ਕਤਾਰਾਂ ਬਾਅਦ ਵਿੱਚ ਭਰਦੀਆਂ ਹਨ।

ਪਹਿਲਾਂ ਹੀ ਪ੍ਰਾਪਤ ਸਰੋਤ ਖਾਸ ਰੈਪਰ 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 ਸਮੀਕਰਨਾਂ ਲਈ ਹੋਰ ਦਸਤਾਵੇਜ਼ੀ ਡੇਟਾ ਇੰਟਰਫ਼ੇਸ ਚਾਹੀਦਾ ਹੈ। ਐਂਡਪੌਇੰਟ ਸੂਚੀ ਲੈਣ ਲਈ ਮਨਮਾਨੀ ਪੇਜ ਕੋਡ ਨਾ ਚਲਾਓ।

ਸਰੋਤ ਦਾ ਸਮਝੌਤਾ ਜਾਂਚੋ ਅਤੇ ਪ੍ਰੋਟੋਕੋਲ ਖੇਤਰ ਵੱਖ ਰੱਖੋ। ਜੇ ਸਰੋਤ ਵਿੱਚ ਇਸ ਦੀ ਥਾਂ ਭਰੀਆਂ HTML ਕਤਾਰਾਂ ਹਨ, ਤਾਂ ਇਸ JavaScript ਰੈਪਰ ਪਾਰਸਰ ਦੀ ਥਾਂ ਕਤਾਰ-ਅਧਾਰਿਤ ਐਂਡਪੌਇੰਟ ਕੱਢਣਾ ਵਰਤੋ। ਪਤਾ ਅਤੇ ਪੋਰਟ ਕੱਢਣਾ ਇਹ ਸਾਬਤ ਨਹੀਂ ਕਰਦਾ ਕਿ ਐਂਡਪੌਇੰਟ ਹੁਣ ਵਰਤੋਂਯੋਗ ਪ੍ਰੌਕਸੀ ਸੇਵਾ ਦੇ ਰਿਹਾ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ