Uguqulelo lukaGoogle kwi-API

Njengengxenye yelifu lakhe likaGoogle, uGoogle unikezela ngeGoogle API yoGuqulelo ngesiseko sendleko esisekwe kusetyenziso. Kukho i- API engenamaphepha enokusetyenziswa ngaphandle kwesitshixo , kodwa esalayo ukusebenza emva kwezicelo ezimbalwa. Xa usebenzisa umsebenzi wokuguqulela iwebhusayithi kwiGoogle Chrome, kuyabonakala ukuba amaphepha anokuguqulelwa kumgangatho olunge kakhulu ngaphandle komda obonakalayo.


Kuyabonakala ukuba imodeli yenmt ephucukileyo sele isetyenziswa apha. Kodwa yeyiphi i-API esetyenziswa nguGoogle Chrome ngaphakathi ukuguqulela umxholo, kwaye ngaba unokufikelela kule API ngokuthe ngqo - nakwicala lomncedisi? Ukuhlalutya i-traffic yenethiwekhi, sincoma izixhobo ezifana ne -Wireshark okanye i-Telerik Fiddler , enokuphinda ihlalutye itrafikhi efihliweyo. Kodwa iChrome ide inikezele ngezicelo ezithumelayo xa kuguqulelwa amaphepha simahla: ayabonakala ngokulula ngeChrome DevTools.:

Ukuba uqhuba uguqulo, bamba isicelo esibalulekileyo sePOST ku https://translate.googleapis.com nge "Copy> Copy as cURL (bash)" kwaye uyenze ngesixhobo esifana nePostman , umzekelo, ungasithumela isicelo kwakhona ngaphandle kwengxaki:

Intsingiselo yeeparameter ze-URL ikwacacile kakhulu.:

IsitshixoIxabiso lomzekeloIntsingiselo
anno3Imowudi yezichaso
umxhasite_libUlwazi lomthengi (luyahluka; nge-web interface yeGoogle Translate ixabiso yi "webapp"; lichaphazela ifomathi yokubuyisela kunye nokunciphisa amaxabiso)
ifomathihtmlIfomathi yomtya (ibalulekile ekuguqulweni kweethegi ze-HTML)
v1.0Inombolo yoguqulelo lukaGoogle
isitshixoAIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgwIsitshixo se-API (jonga ngezantsi)
logldvTE_20200210_00Uhlobo lweProtocol
IsldeUlwimi olusisiseko
tlxhUlwimi ekujoliswe kulo
spnmtImodeli yeML
TC1ayaziwa
sr1ayaziwa
tk709408.812158Ithokheni (jonga ngezantsi)
Ifashoni1ayaziwa

Ezinye izihloko zezicelo nazo zisetiwe- kodwa ezi zinokungahoywa. Emva kokungazikhethi ngesandla zonke ii-headers, kubandakanya nezo zivela kwiarhente yomsebenzisi , ingxaki yekhowudi ifunyenwe xa kufakwa abalinganiswa abakhethekileyo (apha xa kuguqulelwa " Molo weHlabathi "):

Ukuba uyaphinda uyisebenzise iarhente yomsebenzisi (engasebenziyo ngokubanzi), i-API ihambisa i-UTF-8 ebhalwe ngoonobumba:

Ngaba ngoku sifikelele usukelo lwethu kwaye sinalo lonke ulwazi lokusebenzisa le API ngaphandle kweGoogle Chrome? Nangona kunjalo, ukuba utshintsha umtya ukuze uguqulelwe (intsimi yedatha q yesicelo sePOST) ukusuka, umzekelo, "Hello World" ukuya "Hello World ! ", uya kufumana umyalezo wempazamo.:

Ngoku senza olunye uguqulelo lwale ntambo iguquliweyo ngaphakathi kwiGoogle Chrome sisebenzisa umsebenzi woguqulelo lwewebhusayithi kwaye sifumanisa ukuba, ukongeza kwiparameter q , iparameter tk nayo itshintshile (zonke ezinye iiparameter zihlala zifana).:

Ngokucacileyo, luphawu oluxhomekeke kumtya, olwakhiwo olungelula ukuwabona. Xa uqala uguqulelo lwewebhusayithi, ezi fayile zilandelayo zilayishiwe:

  • 1 ifayile yeCSS: translateelement.css
  • Imizobo emi-4: translate_24dp.png (2x), gen204 (2x)
  • 2 iifayile zeJS: main_de.js , element_main.js

Iifayile ezimbini zeJavaScript zenziwe zaze zalungiswa. Izixhobo ezinje ngeJS Nice kunye nee- de4js ngoku ziyasinceda ukwenza ezi fayile zifundeke ngakumbi. Ukuze uzilungise ngokusisigxina, sincoma i-Chrome Extension Isicelo, esilungisa iifayile ezikude kwindawo ekubhabhayo:

Ngoku sinokulungisa ikhowudi (ii- CORS kufuneka ziqale zisebenze kwiserver yasekhaya). Icandelo lekhowudi elifanelekileyo lokuvelisa ithokheni libonakala lifihliwe kweli candelo kwifayile ye- element_main.js:

b7739bf50b2edcf636c43a8f8910def9

Apha isicatshulwa sikhawuleze ngoncedo lotshintsho oluncinci . Kodwa ngelishwa sisaphoswa sisiqwengana sephazili: Ukongeza kwingxoxo a (engumbhalo oza kuguqulelwa), enye impikiswano b idluliselwe kumsebenzi Bp () -uhlobo lwembewu olubonakala luguquka amaxesha ngamaxesha kwaye lukwabandakanya Ukungena kwi-hashing. Kodwa uvela phi? Ukuba sitsibela kumnxeba wokusebenza weBp () , sifumana eli candelo lekhowudi lilandelayo:

b7739bf50b2edcf636c43a8f8910def9

Umsebenzi Hq ubhengezwe kwangaphambili ngolu hlobo lulandelayo:

b7739bf50b2edcf636c43a8f8910def9

I-deobfuscater ishiye inkunkuma apha; emva kokuba sibuyisele iString.fromCharCode('...') ngezintlu ezilandelelanayo, sasusa engasasebenziyo a() kwaye yaqhawula kunye imisebenzi iminxeba [c(), c()] , sifumana:

b7739bf50b2edcf636c43a8f8910def9

Okanye kube lula:

b7739bf50b2edcf636c43a8f8910def9

Umsebenzi yq wachazwa ngaphambili njenge:

b7739bf50b2edcf636c43a8f8910def9

Ngoko ke imbewu ibonakala ikwinto yehlabathi google.translate._const._ctkk , efumaneka ngexesha lokusebenza. Kodwa ibekwe phi? Ubuncinane iyafumaneka ekuqaleni kwenye, ilayishwe ngaphambili ifayile ye-JS main_de.js . Songeza oku kulandelayo ekuqaleni:

b7739bf50b2edcf636c43a8f8910def9

Kwikhonsoli siyifumana ngokwenene imbewu yangoku:

Oku kushiya iGoogle Chrome uqobo, ekubonakala ukuba ibonelela ngembewu, njengokhetho lokugqibela. Ngethamsanqa, ikhowudi yemithombo yayo (iChromium, kubandakanya icandelo leToliki) ngumthombo ovulekileyo kwaye ke uyafumaneka esidlangalaleni. Sitsala indawo yogcino lwasekhaya kwaye sifumana umnxeba weTranscript :: GetTranslateScriptURL umsebenzi kwifayile translate_script.cc kumacandelo / translate / core / browser:

b7739bf50b2edcf636c43a8f8910def9

Umahluko kunye ne-URL uchazwe nzima kwifayile efanayo:

b7739bf50b2edcf636c43a8f8910def9

Ukuba ngoku sivavanya ifayile element.js ngokusondeleyo ngakumbi (emva deobfuscation ngakumbi), sifumana iseti nzima ungeno c._ctkk - into google.translate nayo imiselwe ngokufanelekileyo kwaye ukulayishwa kwazo zonke ii-asethi ezifanelekileyo (esele sizibhaqe ngaphambili) ziyaqhutywa.:

b7739bf50b2edcf636c43a8f8910def9

Ngoku isitshixo sepharameter sihlala siqwalaselwe (ngexabiso AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw). Oku kubonakala ngathi sisitshixo esiqhelekileyo se-API yesitshixo (enokufumaneka nakwezinye iziphumo zikaGoogle ). Kokuba imisiwe kwi chromium kwifayile translate_url_util.cc kwi amacandelo / ukuguqulela / core / browser eneenkcukacha:

b7739bf50b2edcf636c43a8f8910def9

Isitshixo senziwe kugoogle_apis / google_api_keys.cc kwixabiso ledummy:

b7739bf50b2edcf636c43a8f8910def9

Nangona kunjalo, uvavanyo lubonisa ukuba iifowuni ze-API zisebenza kakuhle ngaphandle kwale parameter yesitshixo. Ukuvavanya nge-API ngoku kubuyisela ikhowudi yesimo engama-200 kwiifowuni eziphumeleleyo. Ukuba umda ufikelelwe, ikhowudi yesimo engama-411 ibuyiselwa kunye nomyalezo othi " Izicelo zePOST zifuna i-Content-length header ". Ke ngoko, kuyacetyiswa ukuba kufakwe le header (emiselwa ngokuzenzekelayo njenge- Temporary Header kwi-Postman).

Ifomathi yokubuyisa yemitya eguqulweyo ayiqhelekanga xa kukho izivakalisi ezininzi kwisicelo esinye. Izivakalisi ezizodwa zifakwe kwii-i-b-HTML tags:

Kwakhona, uGoogle Chrome akathumeli i-HTML epheleleyo kwi-API, kodwa ugcina amaxabiso njenge- href kwisicelo (kwaye endaweni yoko usete ii-indices ukuze iithegi zinokwabelwa kamva kwicala lomxhasi):

Ukuba utshintsha ixabiso lomxhasi ophambili wePOST kwi te_lib (Google Chrome) kwiwebhu ( iwebhusayithi yokuTolika kuGoogle ), ufumana umtya wokugqibela oguqulweyo:

Ingxaki kukuba unamathuba amaninzi okubaleka kumda wokunciphisa kunokuba usebenzisa i- te_lib (ngokuthelekisa: nge- webapp oku kufikelelwe emva kwama-40,000 chars, nge te_lib akukho mda umiselweyo). Ke kufuneka sijongisise ukuba iChannel isicacisa njani isiphumo. Siza kuyifumana apha kwi- element_main.js:

b7739bf50b2edcf636c43a8f8910def9

Ukuba uthumela yonke ikhowudi ye-HTML kwi-API, ishiya iimpawu kwimpendulo eguqulelweyo. Ke ngoko akufuneki sixelise yonke indlela yokuziphatha yokwahlulahlula, kodwa sikhuphe kuphela umtya wokugqibela, oguqulelweyo kwimpendulo. Ukwenza oku, sakha i-HTML encinci ye-tag ye-tag elahla i-tags yangaphandle <i> iquka umxholo wabo kwaye isuse i-tags <b> yangaphandle. Ngolu lwazi singakwazi ngoku (emva kokufaka izixhomekeki kunye nomqambi zifuna i-fzaninotto / faker vielhuber / stringhelper ) ukwakha i-server-side version ye-API yokuguqulela:

b7739bf50b2edcf636c43a8f8910def9

Apha ngezantsi kukho iziphumo zovavanyo lokuqala olwaqhutywa kwiisistim ezintlanu ezahlukeneyo ezine-bandwidths ezahlukeneyo kunye needilesi ze-IP:

UphawuAbalinganiswa ngesicelo ngasinyeUbude bexeshaIreyithi yempazamoIindleko nge-API esemthethweni
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 €
Umnxeba: 284.802.766~ ~ ~ 5050159: 11: 37h0%€5183.41

Qaphela: Le posti yebhlog kubandakanya zonke iincwadi zeempendulo zazibhalelwe uvavanyo kuphela. Musa ukusebenzisa amaphepha ukusetyenziswa elinemveliso, asebenze endaweni negosa API Google Translation .

Emva