តារាង 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 ផ្សេងទៀតត្រូវការចំណុចប្រទាក់ទិន្នន័យដែលបានឯកសារផ្សេង។ កុំដំណើរការកូដទំព័រតាមអំពើចិត្តដើម្បីទទួលបានបញ្ជីចុងបញ្ចប់។

ផ្ទៀងផ្ទាត់កិច្ចសន្យាប្រភព ហើយរក្សាវាលពិធីការដោយឡែក។ ប្រសិនបើប្រភពមានជួរ HTML ដែលបានបំពេញជំនួសវិញ សូមប្រើ ការដកចុងបញ្ចប់តាមជួរ ជំនួសកម្មវិធីញែករុំ JavaScript នេះ។ ការដកអាសយដ្ឋាន និងព័រមិនបញ្ជាក់ថាចុងបញ្ចប់ផ្តល់សេវាប្រូកស៊ីដែលអាចប្រើបាននាពេលនេះទេ។

អត្ថបទពាក់ព័ន្ធ