ការបកប្រែរបស់ហ្គូហ្គលបកប្រែ API

ហ្គូហ្គលផ្តល់ជូននូវ សេវាកម្មបកប្រែហ្គូហ្គល API ជាមួយ រចនាសម្ព័ន្ធចំណាយ ផ្អែកលើការប្រើប្រាស់ដែលជាផ្នែកមួយនៃហ្គូហ្គលពពករបស់វា។ ក៏មាន API គ្មានឯកសារ ដែលអាចត្រូវបានប្រើ ដោយគ្មានកូនសោ ប៉ុន្តែដែលបដិសេធមិនដំណើរការបន្ទាប់ពីការស្នើសុំពីរបីដង។ នៅពេលប្រើ មុខងារបកប្រែគេហទំព័រ របស់ Google Chrome វាអាចកត់សម្គាល់បានថាទំព័រនានាអាចត្រូវបានបកប្រែប្រកបដោយគុណភាពល្អដោយគ្មានដែនកំណត់គួរឱ្យកត់សម្គាល់។


ជាក់ស្តែង ម៉ូដែល nmt ជឿនលឿន កំពុង ត្រូវបានប្រើនៅទីនេះ។ ប៉ុន្តែតើ API មួយណាដែល Google Chrome ប្រើនៅខាងក្នុងដើម្បីបកប្រែមាតិកាហើយតើ API នេះអាចត្រូវបានដោះស្រាយដោយផ្ទាល់សូម្បីតែនៅផ្នែកខាងម៉ាស៊ីនមេក៏ដោយ? ដើម្បីវិភាគចរាចរណ៍បណ្តាញឧបករណ៍ដូចជា WiresharkTelerik Fiddler ដែលអាចវិភាគចរាចរណ៍បានអ៊ិនគ្រីបត្រូវបានណែនាំ។ ប៉ុន្តែ Chrome ថែមទាំងផ្តល់ជូននូវសំណើដែលវាផ្ញើសម្រាប់ការបកប្រែទំព័រដោយមិន គិតថ្លៃ : ពួកគេអាចត្រូវបានមើលយ៉ាងងាយស្រួលដោយប្រើ Chrome DevTools:

ប្រសិនបើអ្នកអនុវត្តការបកប្រែបន្ទាប់មកចាប់យកសំណើ POST ដ៏សំខាន់ដើម្បី https://translate.googleapis.com តាមរយៈ "ចម្លង> ចម្លងជា cURL (ប៊ីច)" ហើយប្រតិបត្តិវានៅក្នុងឧបករណ៍ដូចជា Postman ឧទាហរណ៍អ្នកអាចផ្ញើសំណើម្តងទៀតដោយគ្មានបញ្ហា។:

អត្ថន័យនៃប៉ារ៉ាម៉ែត្រ URL ក៏ជាក់ស្តែងផងដែរ:

កូនសោតម្លៃឧទាហរណ៍អត្ថន័យ
anno3របៀបចំណារពន្យល់ (ប៉ះពាល់ដល់ទម្រង់ត្រឡប់មកវិញ)
អតិថិជនte_libព័ត៌មានរបស់អតិថិជន (ខុសគ្នាតម្លៃគឺ "webapp" តាមរយៈចំណុចប្រទាក់គេហទំព័របកប្រែហ្គូហ្គោលមានឥទ្ធិពលលើទំរង់ត្រឡប់មកវិញនិងការកំណត់អត្រា)
ទ្រង់ទ្រាយhtmlទ្រង់ទ្រាយខ្សែអក្សរ (សំខាន់សម្រាប់ការបកប្រែស្លាក HTML)
v1.0លេខកំណែហ្គូហ្គលបកប្រែ
កូនសោAIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgwលេខកូដ API (សូមមើលខាងក្រោម)
logldvTE_20200210_00កំណែពិធីសារ
slដឺភាសាប្រភព
tlenភាសាគោលដៅ
spnmtម៉ូដែលអិល
tc1មិនស្គាល់
sr1មិនស្គាល់
tk709408.812158សញ្ញាតំណាង (សូមមើលខាងក្រោម)
ម៉ូត1មិនស្គាល់

បឋមកថាសំណើមួយចំនួនក៏ត្រូវបានកំណត់ផងដែរ - ប៉ុន្តែភាគច្រើនទាំងនេះអាចត្រូវបានគេមិនអើពើ។ បន្ទាប់ពីដកការជ្រើសរើសបឋមកថាទាំងអស់ដោយដៃរួមទាំងអ្នក ប្រើភ្នាក់ងារ បញ្ហាអ៊ិនកូដត្រូវបានរកឃើញនៅពេលបញ្ចូលតួអក្សរពិសេស (នៅទីនេះនៅពេលបកប្រែ " ហេឡូពិភពលោក "):

ប្រសិនបើអ្នកធ្វើឱ្យភ្នាក់ងារអ្នកប្រើសកម្មឡើងវិញ (ដែលជាទូទៅមិនបង្កអន្តរាយណាមួយ) API នឹងបញ្ជូនតួអក្សរដែលបានអ៊ិនកូដ UTF-8 ចេញ។:

តើយើងនៅទីនោះហើយតើយើងមានព័ត៌មានទាំងអស់ដើម្បីប្រើ API នេះក្រៅពី Google Chrome ទេ? ប្រសិនបើអ្នកប្តូរខ្សែអក្សរដែលត្រូវបកប្រែ (វាលទិន្នន័យ q នៃ ការស្នើសុំរបស់ POST) ពីឧទាហរណ៍“ Hello world” ទៅ“ Hello world ! “ យើងទទួលបានសារកំហុសមួយ:

ឥឡូវនេះយើងបកប្រែការកែប្រែនេះម្តងទៀតនៅក្នុង Google Chrome ដោយប្រើមុខងារបកប្រែគេហទំព័រហើយឃើញថាបន្ថែមលើប៉ារ៉ាម៉ែត្រ q ប៉ារ៉ាម៉ែត្រ tk ក៏បាន ផ្លាស់ប្តូរ ផងដែរ (ប៉ារ៉ាម៉ែត្រផ្សេងទៀតនៅតែដដែល):

ជាក់ស្តែងវាគឺជាថូខឹនដែលពឹងផ្អែកលើខ្សែអក្សររចនាសម្ព័នដែលមិនងាយបង្ហាញឱ្យឃើញ។ នៅពេលអ្នកចាប់ផ្តើមបកប្រែគេហទំព័រឯកសារខាងក្រោមត្រូវបានផ្ទុក:

  • ឯកសារ CSS ១៖ translateelement.css
  • ៤ ក្រាហ្វិចៈ translate_24dp.png (២ គុណ), gen204 (២ ដង)
  • 2 ឯកសារ JS: main_de.js , element_main.js

ឯកសារ JavaScript ពីរត្រូវបានបំភាន់និងបង្រួមអប្បបរមា។ ឧបករណ៍ដូចជា JS Nice និង de4js ឥឡូវនេះកំពុងជួយយើងធ្វើឱ្យឯកសារទាំងនេះអាចអានបានកាន់តែច្រើន។ ដើម្បីបំបាត់កំហុសពួកវាបន្តផ្ទាល់ យើង សូមណែនាំកម្មវិធីបន្ថែមផ្នែកបន្ថែមរបស់ Chrome ដែលភ្ជាប់ទៅនឹងរូងក្រោមដីនូវឯកសារពីចម្ងាយ:

ឥឡូវនេះយើងអាចបំបាត់កំហុសកូដ ( CORS ត្រូវតែត្រូវបានធ្វើឱ្យសកម្មនៅលើម៉ាស៊ីនមេមូលដ្ឋាន) ។ ផ្នែកកូដពាក់ព័ន្ធសម្រាប់ការបង្កើតថូខឹនហាក់ដូចជាត្រូវបានលាក់នៅក្នុងឯកសារ element_main.js នៅក្នុងផ្នែកនេះ:

b7739bf50b2edcf636c43a8f8910def9

នៅទីនេះអត្ថបទត្រូវបានលាងដោយជំនួយពីការ ផ្លាស់ប្តូរបន្តិចបន្តួច ។ ប៉ុន្តែជាអកុសលយើងនៅតែបាត់បំណែកមួយនៃល្បែងផ្គុំរូប: បន្ថែមលើអាគុយម៉ង់ a (ដែលជាអត្ថបទដែលត្រូវបកប្រែ) អាគុយម៉ង់មួយទៀត ត្រូវបានបញ្ជូនទៅមុខងារប៊ីភី () - ប្រភេទនៃគ្រាប់ពូជដែលហាក់ដូចជាផ្លាស់ប្តូរពីមួយពេលទៅមួយហើយនោះក៏រួមបញ្ចូលផងដែរ។ ហូរចូលទៅក្នុង hashing ។ ប៉ុន្តែតើគាត់មកពីណា? ប្រសិនបើយើងលោតទៅមុខងារហៅរបស់ប៊ីភី () យើងរកឃើញផ្នែកកូដដូចខាងក្រោម:

b7739bf50b2edcf636c43a8f8910def9

មុខងារ Hq ត្រូវបានប្រកាសជាមុនដូចខាងក្រោម:

b7739bf50b2edcf636c43a8f8910def9

Deobfuscater បានទុកសំរាមខ្លះនៅទីនេះ។ បន្ទាប់ពីយើងបានជំនួស String.fromCharCode ('... ') ដោយខ្សែអក្សររៀងៗខ្លួនយកអាដែលលែងប្រើ () ចេញ ហើយបញ្ចូលគ្នានូវមុខងារហៅថា [c (), c ()] លទ្ធផលគឺ:

b7739bf50b2edcf636c43a8f8910def9

ឬសូម្បីតែងាយស្រួលជាង:

b7739bf50b2edcf636c43a8f8910def9

មុខងារ yq ត្រូវបានកំណត់ពីមុន:

b7739bf50b2edcf636c43a8f8910def9

គ្រាប់ពូជនេះហាក់ដូចជានៅក្នុងវត្ថុសកល google.translate._const._ctkk ដែលមាននៅពេលដំណើរការ។ ប៉ុន្តែវាត្រូវបានកំណត់នៅកន្លែងណា? មួយវិញទៀត ឯកសារ JS ដែលបានផ្ទុកពីមុនគឺ main_de.js យ៉ាងហោចណាស់វាក៏មាននៅដើមដែរ។ យើងបន្ថែមដូចខាងក្រោមនៅដើម:

b7739bf50b2edcf636c43a8f8910def9

នៅក្នុងកុងសូលយើងពិតជាទទួលបានគ្រាប់ពូជបច្ចុប្បន្ន:

នេះទុកឱ្យ Google Chrome ដោយខ្លួនឯងដែលជាក់ស្តែងផ្តល់គ្រាប់ពូជជាជម្រើសចុងក្រោយ។ ជាសំណាងល្អកូដប្រភពរបស់វា (Chromium រួមទាំងសមាសភាគបកប្រែ) គឺជាប្រភពបើកចំហហើយដូច្នេះអាចប្រើបានជាសាធារណៈ។ យើងទាញ ឃ្លាំង ក្នុងមូលដ្ឋានហើយស្វែងរកការហៅមុខងារ TranslateScript :: GetTranslateScriptURL នៅក្នុងឯកសារ translate_script.cc នៅក្នុង សមាសធាតុ / បកប្រែ / ស្នូល / ថតឯកសារ កម្មវិធីរុករក:

b7739bf50b2edcf636c43a8f8910def9

អថេរជាមួយ URL គឺពិបាកកំណត់ក្នុងឯកសារតែមួយ:

b7739bf50b2edcf636c43a8f8910def9

ប្រសិនបើឥឡូវនេះយើង ពិនិត្យមើល ឯកសារ element.js កាន់តែ ជិតស្និទ្ធ (បន្ទាប់ពីការបដិសេធម្តងទៀត) យើងរកឃើញថាធាតុដែលបានកំណត់យ៉ាងលំបាក c._ctkk - វត្ថុ google.translate ត្រូវបានកំណត់យ៉ាងត្រឹមត្រូវហើយការផ្ទុកទ្រព្យសម្បត្តិដែលពាក់ព័ន្ធទាំងអស់ (ដែលយើងបានរកឃើញមុន) ត្រូវបានកេះ។:

b7739bf50b2edcf636c43a8f8910def9

ឥឡូវ កូនសោ ប៉ារ៉ាម៉ែត្រនៅតែត្រូវពិចារណា (ជាមួយតម្លៃ AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw) ។ នោះហាក់ដូចជាគ្រាប់ចុច API នៃកម្មវិធីរុករកទូទៅ (ដែលអាចរកឃើញនៅក្នុង លទ្ធផល មួយចំនួនរបស់ Google ផងដែរ) ។ វាត្រូវបានកំណត់នៅក្នុង Chromium នៅក្នុងឯកសារ បកប្រែ_url_util.cc នៅក្នុង សមាសធាតុ ថតឯកសារ / បកប្រែ / ស្នូល / កម្មវិធីរុករក:

b7739bf50b2edcf636c43a8f8910def9

លេខ កូដ ត្រូវបានបង្កើតនៅក្នុង google_apis / google_api_keys.cc ពីតម្លៃអត់ចេះសោះ:

b7739bf50b2edcf636c43a8f8910def9

ទោះយ៉ាងណាក៏ដោយការធ្វើតេស្តបង្ហាញថាការហៅទូរស័ព្ទ API ដំណើរការដូចគ្នាដោយគ្មានប៉ារ៉ាម៉ែត្រសំខាន់នេះ។ ប្រសិនបើអ្នកសាកល្បងប្រើ API អ្នកនឹងទទួលបានលេខកូដស្ថានភាព ២០០ ត្រឡប់មកវិញប្រសិនបើអ្នកជោគជ័យ។ ប្រសិនបើអ្នករត់ក្នុងដែនកំណត់អ្នកនឹងទទួលបានលេខកូដស្ថានភាព ៤១១ ត្រឡប់មកវិញ ជាមួយនឹងសារថា " សំណើរបស់ POST ត្រូវការបឋមកថាប្រវែងមាតិកា " ។ ដូច្នេះគួរតែ បញ្ចូលបឋមកថានេះ (ដែលត្រូវ បានកំណត់ជា បឋមកថាបណ្តោះអាសន្ន ដោយស្វ័យប្រវត្តិនៅប្រូមេន)

ទ្រង់ទ្រាយត្រឡប់នៃខ្សែអក្សរដែលបានបកប្រែគឺមិនធម្មតាទេនៅពេលមានប្រយោគជាច្រើននៅក្នុងសំណូមពរមួយ។ ប្រយោគនីមួយៗត្រូវបានព័ទ្ធជុំវិញដោយស្លាក i- / b-HTML:

ដូចគ្នានេះផងដែរ Google Chrome មិនផ្ញើ HTML ទាំងមូលទៅ API ទេប៉ុន្តែរក្សាទុកតម្លៃគុណលក្ខណៈដូចជា href នៅក្នុងសំណើ (ហើយជំនួសកំណត់ការចង្អុលបង្ហាញដើម្បីឱ្យស្លាកអាចត្រូវបានកំណត់នៅខាងអតិថិជន):

ប្រសិនបើអ្នកប្តូរតម្លៃ អតិថិជន សំខាន់ POST ពី te_lib (Google Chrome) នៅលើ webapp ( គេហទំព័របកប្រែហ្គូហ្គល ) អ្នកនឹងទទួលបានឃ្លាចុងក្រោយដែលត្រូវបានបកប្រែ:

បញ្ហាគឺថាអ្នកងាយនឹងឈានដល់ការកំណត់អត្រាជាងតាមរយៈ te_lib (សម្រាប់ការប្រៀប ធៀបៈ ជាមួយនឹង webapp នេះត្រូវបានទៅដល់បន្ទាប់ពី ៤០ ០០០ ដែលមាន te_lib មិនមានការកំណត់អត្រាទេ) ។ ដូច្នេះយើងត្រូវពិនិត្យឱ្យបានដិតដល់អំពីរបៀបដែល Chrome វិភាគលទ្ធផល។ យើងនឹងរកឃើញវានៅទីនេះក្នុង element_main.js:

b7739bf50b2edcf636c43a8f8910def9

ប្រសិនបើអ្នកផ្ញើកូដ HTML ទាំងមូលទៅ API វាទុកគុណលក្ខណៈនៅក្នុងការឆ្លើយតបដែលបានបកប្រែ។ ដូច្នេះហើយ យើងមិនចាំបាច់យកតម្រាប់តាមឥរិយាបថញែកទាំងមូលនោះទេ ប៉ុន្តែគ្រាន់តែទាញយកខ្សែអក្សរដែលបានបកប្រែចុងក្រោយចេញពីការឆ្លើយតបប៉ុណ្ណោះ។ ដើម្បីធ្វើដូច្នេះ យើងបង្កើតកម្មវិធីញែកស្លាក HTML តូចមួយដែលលុបចោលស្លាក <i> ខាងក្រៅបំផុត រួមទាំងមាតិការបស់វា ហើយលុបស្លាក <b> ខាងក្រៅបំផុត។ ជាមួយនឹងចំណេះដឹងនេះ យើងអាចឥឡូវនេះ (បន្ទាប់ពីការដំឡើងភាពអាស្រ័យជាមួយ កម្មវិធីតែងតម្រូវឱ្យ fzaninotto / faker vielhuber / stringhelper ) បង្កើតកំណែផ្នែកខាងម៉ាស៊ីនមេនៃ API បកប្រែ:

b7739bf50b2edcf636c43a8f8910def9

ខាងក្រោមនេះគឺជាលទ្ធផលនៃការសាកល្បងដំបូងដែលត្រូវបានអនុវត្តលើប្រព័ន្ធចំនួនប្រាំផ្សេងគ្នាដែលមានបណ្តាញបញ្ជូនខុសៗគ្នានិងអាសយដ្ឋាន IP:

តួអក្សរតួអក្សរក្នុងមួយសំណើរយៈពេលអត្រាកំហុសចំណាយតាមរយៈ API ផ្លូវការ
13.064.662~250០៣: ៣៦: ១៧h0%237,78€
24.530.510~250១១: ០៩: ១៣h0%446,46€
49.060.211~250២០: ៣៩: ១០ ម៉ោង0%892,90€
99.074.487~1000៦១: ២៤: ៣៧ ហ0%1803,16€
99.072.896~1000៦២: ២២: ២០ ម៉ោង0%1803,13€
Σ ២៨៨.៨០២.៧៦៦~ Ø៥៥០Σ ១៥៩: ១១: ៣៧h0%Σ€ ៥១៨៣.៤១

សម្គាល់ៈ ការបង្ហោះប្លក់នេះរួមទាំងស្គ្រីបទាំងអស់ត្រូវបានសរសេរសម្រាប់គោលបំណងតេស្តតែប៉ុណ្ណោះ។ កុំប្រើស្គ្រីបសម្រាប់ការប្រើប្រាស់ផលិតភាពជំនួសឱ្យធ្វើការជាមួយមន្ត្រី API របស់ Google បកប្រែ

ថយក្រោយ