ដក IP ប្រូកស៊ី និងព័រគោលដប់ប្រាំមួយចេញពី JSON បង្កប់
ឌិកូដទិន្នន័យ JSON ដែលស្គាល់ពីការហៅស្គ្រីបនៃបញ្ជីប្រូកស៊ី ហើយបកស្រាយព័រគោលដប់ប្រាំមួយតែពេលទម្រង់ប្រភពបញ្ជាក់ប៉ុណ្ណោះ។
តារាង 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 នេះ។ ការដកអាសយដ្ឋាន និងព័រមិនបញ្ជាក់ថាចុងបញ្ចប់ផ្តល់សេវាប្រូកស៊ីដែលអាចប្រើបាននាពេលនេះទេ។