1. 程式人生 > >有道翻譯介面 破解

有道翻譯介面 破解

有道翻譯 API

最近有些任務需要將中文翻譯成英文,由於個人英文水平問題,每次都要開啟好幾個線上翻譯網頁,一句一句的丟進去,取最佳者為所用,甚是麻煩。
任務完成之後,就稍微研究了一下各個翻譯介面(Github地址,求star),下面以 “有道翻譯 API” 為例。

有道翻譯官網提供了 API 介面,需要註冊並付費才能使用,按照格式進行請求(JAVA DEMO),其中有一些引數:
API 引數介紹
注意 slat 和 sign 引數。從 JAVA DEMO 中可知,slat 隨機數是通過獲取系統時間得到的,而 sign 簽名則是通過某個字串的 md5 演算法得到的,官網提供的 md5 演算法程式碼如下:

/**
     * 生成32位MD5摘要
     * @param string
     * @return
     */
    public static String md5(String string) {
        if(string == null){
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'A', 'B', 'C', 'D', 'E', 'F'};
        byte
[] btInput = string.getBytes(); try{ /** 獲得MD5摘要演算法的 MessageDigest 物件 */ MessageDigest mdInst = MessageDigest.getInstance("MD5"); /** 使用指定的位元組更新摘要 */ mdInst.update(btInput); /** 獲得密文 */ byte[] md = mdInst.digest(); /** 把密文轉換成十六進位制的字串形式 */
int j = md.length; char str[] = new char[j * 2]; int k = 0; for (byte byte0 : md) { str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); }catch(NoSuchAlgorithmException e){ return null; } }

本來按照上述操作就可以很順利的利用 API 進行開發,關鍵是要收費啊,還是按字元數收費。接下來就開始了破解之路,實現 無需註冊就可以使用 有道翻譯 介面……

有道翻譯 破解

用Chrome開啟有道翻譯首頁,按F12鍵,在翻譯框內輸入一句話,點選翻譯。
審查元素
可以看到有道翻譯的 Request URL 和 Request Method,在往下看:
審查元素
從 From Data 中可以檢視到許多引數。經過多次實驗,發現發生改變的只有 i,salt 和 sign 三個引數值。其中 i 是要翻譯的內容,salt 和 sign 的來歷和作用前面已經介紹了。但在 API 中 sign 引數是帶了 appKey(註冊,後臺生成) 的,我們沒有這個。那麼就需要研究一下如何生成 sign 的了。
在眾多請求中,發現一段 js 程式碼,如下:
這裡寫圖片描述
將這段程式碼格式化一下,搜尋關鍵詞 sign,如下:
這裡寫圖片描述
通過上述的 js 程式碼可知,salt 引數是通過系統時間,加上一個 [1, 10] 的隨機數得到的, sign = md5(固定字串 + 待翻譯內容 + salt + 固定字串) 得到的。這樣我們就可以通過程式碼進行請求了,程式碼如下:

public class YouDao {
    public static void main(String[] args) throws Exception {
        String from = "en";
        String to = "zh-CHS";
        String q = "Who am I? Where am I?";
        String url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule";

        String u = "fanyideskweb";
        String d = q;
        long ctime = System.currentTimeMillis();
        String f = String.valueOf(ctime + (long)(Math.random() * 10 + 1));
        String c = "ebSeFb%=XZ%T[KZ)c(sy!";

        String sign = util.md5(u + d + f + c);

        Map<String, String> params = new HashMap<String, String>();
        params.put("i", q);
        params.put("from", from);
        params.put("to", to);
        params.put("smartresult", "dict");
        params.put("client", "fanyideskweb");
        params.put("salt", f);
        params.put("sign", sign);
        params.put("doctype", "json");
        params.put("version", "2.1");
        params.put("keyfrom", "fanyi.web");
        params.put("action", "FY_BY_CLICKBUTTION");
        params.put("typoResult", "false");

        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost request = new HttpPost(util.getUrlWithQueryString(url, params));

//        request.setHeader("Accept","application/json, text/javascript, */*; q=0.01");
//        request.setHeader("Accept-Encoding","gzip, deflate");
//        request.setHeader("Accept-Language","zh-CN,zh;q=0.9");
//        request.setHeader("Connection","keep-alive");
//        request.setHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
        request.setHeader("Cookie","OUTFOX_SEARCH_USER_ID_NCOO=1537643834.9570553; [email protected]; fanyi-ad-id=43155; fanyi-ad-closed=1; JSESSIONID=aaaBwRanNsqoobhgvaHmw; _ntes_nnid=07e771bc10603d984c2dc8045a293d30,1525267244050; ___rl__test__cookies=" + String.valueOf(ctime));
//        request.setHeader("Host","fanyi.youdao.com");
//        request.setHeader("Origin","http://fanyi.youdao.com");
        request.setHeader("Referer","http://fanyi.youdao.com/");
        request.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
//        request.setHeader("X-Requested-With","XMLHttpRequest");

        CloseableHttpResponse httpResponse = httpClient.execute(request);
        HttpEntity httpEntity = httpResponse.getEntity();
        String result = EntityUtils.toString(httpEntity, "UTF-8");
        EntityUtils.consume(httpEntity);    // 關閉
        httpResponse.close();

        String res[] = result.split("\"");
        StringBuilder resd = new StringBuilder();
        for (int i = 0; i < res.length; i++) {
            if (res[i].equals("tgt")) {
                resd.append(res[i + 2]);
            }
        }
        System.out.println(resd.toString());
    }

其中,md5() 和 getUrlWithQueryString() 可以利用 JAVA DEMO 提供的方法。

相關推薦

翻譯介面 破解

有道翻譯 API 最近有些任務需要將中文翻譯成英文,由於個人英文水平問題,每次都要開啟好幾個線上翻譯網頁,一句一句的丟進去,取最佳者為所用,甚是麻煩。 任務完成之後,就稍微研究了一下各個翻譯介面(Github地址,求star),下面以 “有道翻譯 API”

Python編寫翻譯介面小工具

前幾天剛剛學習了urllib和json庫 urllib 庫主要是檢視一個網站網頁的原始碼。多於正則,bs配合編寫爬蟲。 它還有一個重要的功能是,能向網站提交get post的請求 還有附帶的幾個模組 urllib.request 請求模組 urllib.error 異

非官方介面-查詢英語單詞詳細資訊 C# API翻譯 查詢單詞詳細資訊

有道翻譯有官方介面,也有非官方介面。 有道官方介面 官方介面:https://openapi.youdao.com/openapi 可查詢英語單詞註釋、單詞發音、網路釋義(不一定存在),可獲取線上發音地址。 具體使用,可參考 C# 有道API翻譯 查詢單詞詳細資訊 有道非官方介面 何謂非官方介面,

用Python破解翻譯反爬蟲機制

破解有道翻譯反爬蟲機制 web端的有道翻譯,在之前是直接可以爬的。也就是說只要獲取到了他的介面,你就可以肆無忌憚的使用他的介面進行翻譯而不需要支付任何費用。那麼自從有道翻譯推出他的API服務的時候,就對這個介面做一個反爬蟲機制(如果大家都能免費使用到他的翻譯介面,那他的

Python(4) 用Python破解翻譯反爬蟲機制

web端的有道翻譯,在之前是直接可以爬的。也就是說只要獲取到了他的介面,你就可以肆無忌憚的使用他的介面進行翻譯而不需要支付任何費用。那麼自從有道翻譯推出他的API服務的時候,就對這個介面做一個反爬蟲機制(如果大家都能免費使用到他的翻譯介面,那他的API服務怎麼賺錢)。這個反爬蟲機制在爬

Android中使用翻譯生成介面資料

1.訪問有道翻譯,按步驟填寫 2.向下拉頁面,找到生成的介面(預設是get請求)   http://fanyi.youdao.com/openapi.do?keyfrom=wojiaozhh&am

【Python爬蟲】翻譯最新爬蟲教程,帶GUI應用介面,2018年3月18日實測可用

最新的有道翻譯爬蟲程式碼,包含應用程式介面,更新於20180318import urllib.request import urllib.parse import json import time import gzip import random import hashli

JAVA呼叫API介面對資料庫中的中文語句進行翻譯

今天遇到一個小需求,就是將資料庫中的某個中文欄位翻譯成英文,總共有六百多條,直接只用資料庫update語句和手動翻譯效率很慢。我想這如果可以呼叫有道翻譯API介面將翻譯的語句結合原中文欄位拼接成update語句,最後將update語句做成update指令碼即可一次性全部修改資

運用api介面寫一個小翻譯(簡單版)

package com.zhidi.zuoye; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStrea

翻譯介面練習post請求py2

# -*- coding:utf-8 -*-import urllibimport urllib2#post請求urlurl = 'http://fanyi.youdao.com/translate'#post請求headersheaders = {"User-Agent":

翻譯爬蟲(破解引數加密機制)

反爬機制: salt與sign變化加密 解決:js生成 function(e, t) { var n = e("./jquery-1.7"); e("./utils"); e("./md5"); var r = function(e) { v

Java接口測試之使用翻譯API

== continue 接口測試 its turn 進行 each exce tostring 寫接口測試框架,找了有道翻譯API來當測試數據 package com.httpGetTest; import java.beans.Encoder; import

Android應用記錄一:翻譯API調用

.get 返回結果 是我 git 最新版 cts json數據 調用 sla 因為某些原因,我需要記單詞,而且討厭廣告,所以就想著自己寫個能夠查自己不認識的單詞並且以後可以隨時查看的APP。 首先我需要調用一個翻譯API,中文翻譯比較好用的API有有道翻譯API,百度翻譯A

獲取翻譯頁面

爬蟲入門#!/usr/bin/env python#-*- coding:utf-8 -*-import urllibimport urllib2#有一顆耐不住寂寞的心,決定再試試找找其他(除了POST方式)跟有道幹起來的爬取方式#功夫不負有心人 url="http://dict.youdao.com/sea

我跟翻譯幹起來了

爬取youdao翻譯1.先把需要用的url和queryString以及報頭準備好<pre>url = http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFromUser-Agen

翻譯

url png imp pri response web 分享 譯文 輸入 import urllib.requestimport urllib.parseimport jsoncontent=input(‘請輸入你要翻譯文本\n‘)data={}data[‘i‘]

Python3網絡爬蟲(二):利用urllib.urlopen向翻譯發送數據獲得翻譯結果

-c doctype result click 如果 enc tex 自己 數據 一、urlopen的url參數 Agent url不僅可以是一個字符串,例如:http://www.baidu.com。url也可以是一個Request對象,這就需要我們先定義一個

selenium之百度搜索+翻譯的簡單testcase執行-----用例報告(HTMLTestRunner)

file 第一個 stream str utf-8 equal code col sele 本篇主要實現selenium自動化測試之百度搜索+有道翻譯的簡單測試用例執行,並通過HTML TestRunner生成html測試報告.這是前不久跟著視頻學習的時候,練習的第一個HT

使用python2爬取翻譯

驗證碼 傳輸 5.0 translate 技術 pri nec orm lib 爬蟲的核心思想:模擬瀏覽器正常訪問服務器,一般情況只要瀏覽器能訪問的,都可以爬,如果被反爬,則考慮反復測試添加Request Header數據,知道可以爬取為止。 反爬思路目前知道的有:User

【Python3爬蟲】翻譯

inpu handler ram lan chrome+ str sel text json 準備:Python3.5+Chrome+Pycharm 步驟: (1)打開有道翻譯的網頁,然後鼠標右鍵檢查(或者按F12),再輸入一個單詞(例如book),在XHR選項中可以看到這