百度翻譯接口測(cè)試(3)-最終篇_第1頁(yè)
百度翻譯接口測(cè)試(3)-最終篇_第2頁(yè)
百度翻譯接口測(cè)試(3)-最終篇_第3頁(yè)
百度翻譯接口測(cè)試(3)-最終篇_第4頁(yè)
百度翻譯接口測(cè)試(3)-最終篇_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

百度翻譯接?測(cè)試(3)-最終篇經(jīng)過(guò)了的博客啟發(fā),我們?nèi)绻胍獙?shí)現(xiàn)百度翻譯,還需要搞清楚sign的值是從何?來(lái)的,搬好?板凳,開(kāi)始上教程!第?步翻譯結(jié)果出來(lái)后我們打開(kāi)開(kāi)發(fā)者?具(或者按F12),然后按“Ctrl+Shift+F”進(jìn)?全局搜索,搜索關(guān)鍵字“sign”,搜索出來(lái)后點(diǎn)擊打開(kāi)點(diǎn)擊下?的標(biāo)志可以格式化代碼第?步我們現(xiàn)在還不知道這個(gè)sign:y(a)是什么意思,我們就打上斷點(diǎn)調(diào)試?下,瀏覽器調(diào)試代碼?法請(qǐng)??百度。刷新頁(yè)?重新進(jìn)?翻譯,調(diào)試到這?代碼之后,我們把?標(biāo)放在這?,可以看到a的值就是我們輸?的要查詢(xún)的單詞,sign的值很可能就是由函數(shù)y產(chǎn)?的,那么y是什么呢?我們把?標(biāo)放到y(tǒng)上?,就可以看到y(tǒng)的函數(shù)主體部分,?標(biāo)點(diǎn)擊就可以進(jìn)去這個(gè)函數(shù)主體函數(shù)主體部分的代碼如下:functione(r){varo=r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);if(null===o){vart=r.length;t>30&&(r=""+r.substr(0,10)+r.substr(Math.floor(t/2)-5,10)+r.substr(-10,10))}else{for(vare=r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/),C=0,h=e.length,f=[];h>C;C++)""!==e[C]&&f.push.apply(f,a(e[C].split(""))),C!==h-1&&f.push(o[C]);varg=f.length;g>30&&(r=f.slice(0,10).join("")+f.slice(Math.floor(g/2)-5,Math.floor(g/2)+5).join("")+f.slice(-10).join(""))}varu=void0,l=""+String.fromCharCode(103)+String.fromCharCode(116)+String.fromCharCode(107);u=null!==i?i:(i=window[l]||"")||"";for(vard=u.split("."),m=Number(d[0])||0,s=Number(d[1])||0,S=[],c=0,v=0;v<r.length;v++){varA=r.charCodeAt(v);128>A?S[c++]=A:(2048>A?S[c++]=A>>6|192:(55296===(64512&A)&&v+1<r.length&&56320===(64512&r.charCodeAt(v+1))?(A=6S[c++]=A>>18|240,S[c++]=A>>12&63|128):S[c++]=A>>12|224,S[c++]=A>>6&63|128),S[c++]=63&A|128)}for(varp=m,F=""+String.fromCharCode(43)+String.fromCharCode(45)+String.fromCharCode(97)+(""+String.fromCharCode(94)+String.fromCharCp+=S[b],p=n(p,F);returnp=n(p,D),p^=s,0>p&&(p=(2147483647&p)+2147483648),p%=1e6,p.toString()+"."+(p^m)}第三步我們把這份js代碼另存為fun_e(r).js,然后利?Python的PyExecJS庫(kù)調(diào)試運(yùn)?下這段js代碼(需要提前裝好node.js環(huán)境)importexecjs#print(execjs.get().name)#輸出所?環(huán)境名稱(chēng)withopen("pytest\翻譯接?\\fun_e(r).js","r",encoding='utf-8')asf:ctx=pile(f.read())print(ctx.call("e","我是?帥哥"))但是運(yùn)?后提?變量i沒(méi)有被定義我們返回到瀏覽器,找到i,同樣的打上斷點(diǎn),這?我給變量u也打上斷點(diǎn)了,?便看變量u值的變化,跟上??樣,調(diào)試后可以看到i的值為"320305.131321201"這時(shí),我們還不能確定i的值是不是就是"320305.131321201",我們換個(gè)詞重新進(jìn)?翻譯調(diào)試,經(jīng)過(guò)多次試驗(yàn),i的值固定不變,我們可以確定i的值就是"320305.131321201"(字符串類(lèi)型)第四步我們?cè)谥敖ê玫膉s?件中定義?個(gè)i變量并賦值重新調(diào)試運(yùn)??提?n沒(méi)有被定義我們故技重施,返回瀏覽器搜索到n,打斷點(diǎn)調(diào)試,可以找到n的函數(shù)主體我們把這段代碼復(fù)制下來(lái)放到j(luò)s?件??的前?,重新運(yùn)?代碼得到sign值?。ú淮_定是不是sign值的話就在瀏覽器中搜索相同的詞,看看提交表單的sign值是不是?樣,換詞多次試驗(yàn)可以確定這個(gè)就是sign值)完整的js代碼如下functionn(r,o){for(vart=0;t<o.length-2;t+=3){vara=o.charAt(t+2);a=a>="a"?a.charCodeAt(0)-87:Number(a),a="+"===o.charAt(t+1)?r>>>a:r<<a,r="+"===o.charAt(t)?r+a&4294967295:r^a}returnr}functione(r){varo=r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);if(null===o){vart=r.length;t>30&&(r=""+r.substr(0,10)+r.substr(Math.floor(t/2)-5,10)+r.substr(-10,10))}else{for(vare=r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/),C=0,h=e.length,f=[];h>C;C++)""!==e[C]&&f.push.apply(f,a(e[C].split(""))),C!==h-1&&f.push(o[C]);varg=f.length;g>30&&(r=f.slice(0,10).join("")+f.slice(Math.floor(g/2)-5,Math.floor(g/2)+5).join("")+f.slice(-10).join(""))}vari="320305.131321201";varu=void0,l=""+String.fromCharCode(103)+String.fromCharCode(116)+String.fromCharCode(107);u=null!==i?i:(i=window[l]||"")||"";for(vard=u.split("."),m=Number(d[0])||0,s=Number(d[1])||0,S=[],c=0,v=0;v<r.length;v++){varA=r.charCodeAt(v);128>A?S[c++]=A:(2048>A?S[c++]=A>>6|192:(55296===(64512&A)&&v+1<r.length&&56320===(64512&r.charCodeAt(v+1))?(A=6S[c++]=A>>18|240,S[c++]=A>>12&63|128):S[c++]=A>>12|224,S[c++]=A>>6&63|128),S[c++]=63&A|128)}for(varp=m,F=""+String.fromCharCode(43)+String.fromCharCode(45)+String.fromCharCode(97)+(""+String.fromCharCode(94)+String.fromCharCp+=S[b],p=n(p,F);returnp=n(p,D),p^=s,0>p&&(p=(2147483647&p)+2147483648),p%=1e6,p.toString()+"."+(p^m)}第五步既然如何獲取sign值了,那么百度翻譯也就搞定啦,奉上完整代碼#破解sign值importrequestsimportreimportexecjsimportjsonheaders={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/69.0.3497.100Safari/537.36",'Cookie':'PSTM=1575539987;BAIDUID=A80872D93185A688C8AC8CF159A4EF54:FG=1;BIDUPSID=3D8B9E5934B26CCEF003426B6773A431;BDORZ=B490B5}form_data={#'from':'zh',#'from':'zh',#'to':'en',#'query':word,'transtype':'realtime','simple_means_flag':'3',#'sign':None,'token':'42e08df4cfc832413f5c96516ed21cc3'}#獲取sign的值defgetSign(word):withopen('pytest\翻譯接?\\fun_e(r).js','r',encoding='utf-8')asf:sign_js=pile(f.read())returnsign_js.call('e',word)#獲取結(jié)果的json數(shù)據(jù)defgetResult(url):try:r=requests.post(url,data=form_data,headers=headers,timeout=30)r.raise_for_statusreturnr.textexcept:return''#主函數(shù)print("本程序同時(shí)?持漢譯英和英譯漢")print("漢譯英請(qǐng)輸?1,英譯漢請(qǐng)輸?其他?0數(shù)字")print("若想終?程序,請(qǐng)輸?0")while(True):a=eval(input("請(qǐng)輸?數(shù)字:"))ifa==1:f='zh't='en'elifa==0:breakelse:f='en't='zh'url_post="/v2transapi"word=input("請(qǐng)輸?要查詢(xún)的字符:")sign=getSign(word)form_data['from']=fform_data['t

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論