Google Fasiraadda API Jabsiga

Iyada oo qayb ka ah Google Cloud, Google waxay bixisaa Google Translation API oo leh qaab kharash ku saleysan adeegsi. Waxaa sidoo kale jira API aan sharciyeysneyn oo loo isticmaali karo fure la'aan , laakiin diidaya inuu shaqeeyo kadib codsiyo yar. Markaad isticmaaleyso howlaha turjumaadda websaydhka ee Google Chrome, waa la ogaan karaa in bogagga loo turjumi karo tayo aad u wanaagsan iyada oo aan wax xaddidan la ogaan karin.


Sida muuqata moodeelka horumarsan ee nmt ayaa durba halkan lagu isticmaalay. Laakin API keebaa Google Chrome u isticmaala gudaha si uu u tarjumo waxa ku jira, sidoo kale miyaad si toos ah u geli kartaa API-ga xitaa dhanka server-ka? Si loo falanqeeyo taraafikada shabakada, waxaan kugula talineynaa aaladaha sida Wireshark ama Telerik Fiddler , kaas oo sidoo kale falanqayn kara taraafikada sirta ah. Laakin Chrome xitaa waxa uu keenaa codsiyada uu soo diro marka uu u turjumayo boggaga lacag la'aan: si fudud ayaa looga arki karaa Chrome DevTools:

Haddii aad tarjumaad fuliso, markaa la qabso POST codsi muhiim ah oo ah https://translate.googleapis.com adoo adeegsanaya "Nuqul> Nuqul sida cURL (bash)" oo aad ugu fuliso qalab sida Postman ah , tusaale ahaan, waxaad codsi u diri kartaa mar kale dhibaato la'aan:

Macnaha xuduudaha URL-ka sidoo kale waa mid inta badan cad.:

FureQiimaha tusaalahaMacnaha
xanaaq3Habka Fasiraadda (waxay saameyneysaa qaabka soo celinta)
macmiilte_libMacluumaadka macaamiisha (way kala duwan yihiin; iyada oo loo marayo is-dhexgalka shabakadda ee Google Translate qiimuhu waa "webapp"; wuxuu saameeyaa qaabka soo celinta iyo xaddidaadda heerka)
qaabhtmlQaabka xargaha (muhiim u ah tarjumaadda tags HTML)
v1.0Nambarka nooca Google Translate
fureAIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgwFuraha API (hoos eeg)
jaceylvTE_20200210_00Nooca borotokoolka
sldeLuuqada laga soo xigtay
tlenLuuqada Bartilmaameedka
spnmtQaabka ML
tc1lama yaqaan
sr1lama yaqaan
tk709408.812158Token (hoos eeg)
Dharka1lama yaqaan

Qaar ka mid ah madaxyada dalabka ayaa sidoo kale la dejiyaa - laakiin kuwan badiyaa waa la iska indhatiri karaa. Ka dib markii aad gacanta ka dooratay dhammaan madaxyada, oo ay ku jiraan kuwa ka socda wakiilka isticmaalaha , dhibaato habayn ayaa la ogaadaa marka la galayo jilayaal gaar ah (halkan markii la turjumayo " Hello World "):

Haddii aad dib u hawlgeliso wakiilka isticmaalaha (taasi guud ahaan waxyeello ma geysato), API waxay soo gudbineysaa xarfaha loo yaqaan 'UTF-8 encoded':

Hadda ma gaarnay yoolkeenna oo ma haynaa dhammaan macluumaadka aan ku isticmaalno API-gan meel ka baxsan Google Chrome? Si kastaba ha ahaatee, haddii aad beddesho xarigga la turjumayo (goobta xogta q ee codsiga POST) laga bilaabo, tusaale ahaan, "Hello World" una gudubto "Hello World ! ", waxaad heli doontaa farriin qalad ah.:

Hadda waxaan sameynaa turjumaad kale oo xariggan wax laga beddelay gudaha Google Chrome annagoo adeegsanayna shaqada turjumaadda mareegaha, waxaana ogaanay in, marka lagu daro parameter q , parameter tk uu sidoo kale isbeddelay (dhammaan xuduudaha kale way isku mid ahaayeen).:

Sida iska cad, waa astaan ​​ku tiirsan xariga, qaab dhismeedkiisana aan si sahal ah u muuqan. Markaad bilowdo tarjumaadda websaydhka, faylasha soo socda ayaa la raraa:

  • 1 Faylka CSS: translateelement.css
  • 4 sawiro: translate_24dp.png (2x), gen204 (2x)
  • 2 Faylasha JS: main_de.js , element_main.js

Labada fayl ee JavaScript waa la been abuuray oo waa la yaraeyay. Qalabka sida JS Nice iyo de4js ayaa hadda naga caawinaya inaan ka dhigno feylashaan kuwo la aqrin karo. Si toos ah looga takhaluso iyaga, waxaan kugula talineynaa Codsiga Kordhinta ee Chrome , kaas oo ku xidha faylasha fog fog ee gudaha duulimaadka:

Hadda waxaan ka saari karnaa koodhka ( CORS waa in marka hore lagu hawlgeliyaa server-ka maxalliga ah). Qaybta ku habboon ee koodhka ee soo saarista calaamaddu waxay umuuqataa in lagu qarinayo faylka element_main.js ee qaybtaan:

b7739bf50b2edcf636c43a8f8910def9

Halkan qoraalka ayaa lagu dhaqaajiyay iyadoo la kaashanayo xoogaa isbeddelo ah . Laakiin nasiib daro wali waxaan ka maqanahay hal xabbadood oo halxiraalaha ah: Marka lagu daro dooda a (oo ah qoraalka la turjumaayo), dood kale b ayaa loo gudbiyaa shaqada Bp () - nooc ka mid ah abuurka oo umuuqda inuu is badalayo waqti ka waqti taasna waxaa sidoo kale kujira qulqulaya Laakiin xaggee buu ka yimid? Haddii aan u boodno wicitaanka waxqabadka ee Bp () , waxaan helnaa qaybta koodhka soo socda:

b7739bf50b2edcf636c43a8f8910def9

Hawsha Hq horey ayaa loogu dhawaaqay sida soo socota:

b7739bf50b2edcf636c43a8f8910def9

Deobfuscater ayaa halkan kaga tagay xoogaa qashin ah; Ka dib markii aan ku beddelno String.fromCharCode('...') xargaha kala duwan, ka saarno duugga a() oo aan isu geyno wicitaannada shaqada [c (), c ()] , waxaan heleynaa:

b7739bf50b2edcf636c43a8f8910def9

Ama xitaa ka fudud:

b7739bf50b2edcf636c43a8f8910def9

Shaqada yq horey ayaa loo qeexay:

b7739bf50b2edcf636c43a8f8910def9

Markaa abuurku wuxuu u muuqdaa inuu ku jiro shayga caalamiga ah google.translate._const._ctkk , kaas oo la heli karo wakhtiga runtime. Laakin halkee la dhigaa? Ugu yaraan waxa kale oo laga heli karaa bilowga kan kale, hore u raray faylka JS main_de.js . Waxaan ku darnaa kuwa soo socda bilowga:

b7739bf50b2edcf636c43a8f8910def9

Konsol-ka waxaan dhab ahaan ku helnaa abuur hadda jira:

Tani waxay ka tagaysaa Google Chrome lafteeda, oo sida muuqata bixisa abuurka, oo ah ikhtiyaarka ugu dambeeya. Nasiib wanaagse, koodhkeeda asalka ah (Chromium, oo ay ku jiraan qaybta Translate) waa ilo furan sidaas darteedna si guud ayaa loo heli karaa. Waxaan jiidaneynaa keydka maxaliga ah waxaanan helnaa wicitaanka TranslateScript :: GetTranslateScriptURL oo kujira feylka translate_script.cc ee qaybaha / translate / core / browser folder:

b7739bf50b2edcf636c43a8f8910def9

Doorsoomaha leh URL-ka ayaa si adag loogu qeexay isla faylka:

b7739bf50b2edcf636c43a8f8910def9

Haddii aan hadda si dhow u baarno faylka element.js (ka dib faahfaahin dheeraad ah), waxaan helnaa gelitaanka adag ee c._ctkk - shayga google.translate ayaa sidoo kale loo dejiyay si waafaqsan iyo rarida dhammaan hantida ku habboon (oo aan horay u ogaanay) waa la kiciyay.:

b7739bf50b2edcf636c43a8f8910def9

Hadda furaha halbeegga ayaa weli ah tixgelinta (oo leh qiimaha AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw). Taasi waxay umuuqataa furaha guud ee furaha API (oo waliba lagaheli karo natiijooyinka Google qaarkood). Waxaa lagu dejiyay Chromium faylka translate_url_util.cc oo ka kooban qaybaha / translate / core / folder browser:

b7739bf50b2edcf636c43a8f8910def9

Furaha waxaa laga soo saaray google_apis / google_api_keys.cc oo laga soo qaaday qiime dummy ah:

b7739bf50b2edcf636c43a8f8910def9

Si kastaba ha ahaatee, tijaabadu waxay muujinaysaa in wicitaanada API ay si fiican u shaqeeyaan iyada oo aan lahayn halbeeggan muhiimka ah. Tijaabada API-ga hadda waxay soo celisaa kood xaaladeed oo ah 200 wicitaanada guuleysta. Haddii xadka la gaaro, kood xaaladeed oo ah 411 ayaa lagu soo celiyaa farriinta " Codsiyada POST waxay u baahan yihiin cinwaan dherer-macluumaad ". Sidaa darteed, waxaa lagu talinayaa in sidoo kale lagu daro cinwaankan (kaas oo si toos ah loogu dejiyay Cinwaan Ku-meel-gaar ah oo ku jira Postman).

Qaabka soo noqoshada ee xargaha la tarjumay ayaa ah mid aan caadi ahayn marka ay jiraan weedho dhowr ah oo hal codsi ah. Jumladaha shaqsiga ah waxaa ku lifaaqan astaamaha i- / b-HTML:

Sidoo kale, Google Chrome kumuu dirin dhammaan HTML-ka API-ga, laakiin wuxuu keydiyaa qiyamka astaamaha sida href ee codsiga (oo taa beddelkeed wuxuu dejiyaa indices si markaas astaamaha mar dambe loogu qoondeeyo dhinaca macmiilka):

Haddii aad ka bedesho qiimaha macmiilka muhiimka ah POST te_lib (Google Chrome) webapp ( shabakada turjumaada Google ), waxaad heleysaa xarigii ugu dambeeyay ee la turjumay:

Dhibaatada jirta ayaa ah inaad aad ugu dhowdahay inaad kudhacdo xaddidaadda xaddidan marka loo eego te_lib (marka la barbardhigo: webapp tan waxaa lagu gaaraa 40,000 kadib, te_lib-na ma jirto xaddid xaddidan). Marka waxaan u baahanahay inaan si dhow u jaleecno sida Chrome natiijada u soo celinayo. Waxaan ka heli doonnaa halkan element_main.js:

b7739bf50b2edcf636c43a8f8910def9

Haddii aad u dirto dhammaan koodka HTML API-ga, waxay ka tagtaa sifooyinka jawaabta la turjumay. Sidaa darteed ma aha inaan ku dayno dhammaan hab-dhaqanka falanqaynta, laakiin kaliya ka soo saarno xadhigga ugu dambeeya, ee la turjumay jawaabta. Si tan loo sameeyo, waxaan dhiseynaa HTML tag parser yar oo meesha ka saaraysa <i> tagsyada ugu dambeeya oo ay ku jiraan waxa ku jira oo meesha ka saaraya <b>tamaha ugu dambeeya. Aqoontan ayaan hadda awoodnaa (ka dib markii aan ku rakibno ku-tiirsanaanta laxamiistaha waxay u baahan yihiin fzaninotto / faker vielhuber / stringhelper ) dhisida nooca server-ka ee tarjumaada API:

b7739bf50b2edcf636c43a8f8910def9

Hoos waxaa ku yaal natiijooyinka imtixaankii ugu horreeyay ee lagu sameeyay shan nidaam oo kala duwan oo leh xargo kala duwan iyo cinwaanno IP ah:

DabeecadCalaamadaha codsi kastaMuddadaQiyaasta qaladkaKharashka adoo adeegsanaya API-ga rasmiga ah
13.064.662~25003: 36: 17h0%237,78 €
24.530.510~25011: 09: 13h0%446,46 €
49.060.211~25020: 39: 10h0%892,90 €
99.074.487~100061: 24: 37h0%1803,16 €
99.072.896~100062: 22: 20h0%1803,13 €
Σ284.802.766~ 50550159: 11: 37h0%€ 5183.41

Xusuusin: Qoraalkan blog-ka oo ay ku jiraan qoraallada oo dhan waxaa loo qoray ujeeddooyin imtixaan oo keliya. Ha isticmaalin qabnay loo isticmaalo wax soo saar leh, halkii la rasmiga shaqeeyaan API Google Translation .

Dib u laabo