0

I'm trying to make a simple translator for chinese website using DeepL Traslator, got the data from Live http header

thank in advance --- thank in advance ---- thank in advance

thank in advance --- thank in advance --- thank in advance

thank in advance --- thank in advance --- thank in advance

POST https://www2.deepl.com/jsonrpc HTTP/1.1 Host: www2.deepl.com Connection: keep-alive Content-Length: 211 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36 Content-type: application/json Accept: */* Origin: https://www.deepl.com Sec-Fetch-Site: same-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://www.deepl.com/ Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9
   
        {"jsonrpc":"2.0","method": "LMT_handle_jobs","params":{"jobs":[{"kind":"default","raw_en_sentence":"武术永生继承体系的最新篇章","raw_en_context_before":[],"raw_en_context_after":[],"preferred_num_beams":4,"quality":"fast"}],"lang":{"user_preferred_langs":["EN","DE","ZH"],"source_lang_user_selected":"ZH","target_lang":"EN"},"priority":-1,"commonJobParams":{},"apps":{"usage":1},"timestamp":1600378823885},"id":54410005}
        
        
        HTTP/2.0 200 OK
        Server: nginx
        Date: Thu, 17 Sep 2020 21:40:25 GMT
        Content-Type: application/json; charset=utf-8
        Content-Length: 859
        access-control-allow-credentials: true
        access-control-allow-origin: https://www.deepl.com
        Set-Cookie: LMTBID=v2|ae55c469-ae91-4753-8847-d9089c7b4696|2b3201e8abd3891c9bbd6cb6b07eb778; Version=1; Path=/; Domain=.deepl.com; Secure; HttpOnly; Expires=Wed, 17-Mar-2021 00:00:00 GMT
        X-Firefox-Spdy: h2
        
        
        {"jsonrpc":"2.0","id":54410005,"result":{"translations":[{"beams":[{"postprocessed_sentence":"The latest chapter of the Martial Immortal Inheritance System","num_symbols":17,"score":-4996.555932850418,"totalLogProb":6.38829182947645},{"postprocessed_sentence":"The latest chapter of the Wuxian Inheritance System","num_symbols":15,"score":-4996.682360226365,"totalLogProb":6.210432005285439},{"postprocessed_sentence":"The latest chapter of the Martial Immortal Legacy System","num_symbols":15,"score":-4996.792936387164,"totalLogProb":6.003439753290133},{"postprocessed_sentence":"The newest chapter of the Martial Immortal Inheritance System","num_symbols":18,"score":-4997.178788573046,"totalLogProb":5.208891251223198}],"quality":"normal"}],"target_lang":"EN","source_lang":"ZH","source_lang_is_confident":true,"timestamp":1600378825,"date":"20200917"}}

this my full code, Sorry I'm just a beginner So... lol but got Empty Result Not Sure what's the problem...

using System;
using System.Net.Http;
using System.Windows.Forms;
using HtmlAgilityPack;
using System.Linq;
using System.Data;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
using System.IO;


namespace translate2test
{


    public partial class Form1 : Form
    {
        DataTable table;

        string firstData = Interaction.InputBox("Enter your URL", "My Novel Reaser", "Let's have fun", 200, 200);


        public Form1()
        {
            InitializeComponent();

            if (firstData != "")
                test(firstData);


        }
        // TODO: get data from "https://tw.uukanshu.com/b/52103/17208.html" and dump it in textbox



        public async void test(string MyURL)
        {

            // string MyURL = txtURL.Text;

            HtmlWeb web = new HtmlWeb();
            var doc = await Task.Factory.StartNew(() => web.Load(MyURL));



            var title = doc.DocumentNode.SelectNodes(@"//*[@id=""timu""]")
            .Select(node => node.InnerText);
            var firsttext = doc.DocumentNode.SelectNodes(@"//*[@id=""contentbox""]/text()[2]")
                .Select(node => node.InnerText);
            var theOtherText = doc.DocumentNode.SelectNodes(@"//*[@id=""contentbox""]//p")
                .Select(node => node.InnerText);




            table = new DataTable("Datatabletranslator");
            table.Columns.Add("Paragraph", typeof(string));

            foreach (string items in title)
            {
                table.Rows.Add(items);
            }

            foreach (string items in firsttext)
            {
                table.Rows.Add(items);
            }
            foreach (string items in theOtherText)
            {
                table.Rows.Add(items);
            }



            for (int i = 0; i < table.Rows.Count; i++)
            {
                txtCollectFull.Text = txtCollectFull.Text + " " + table.Rows[i][0].ToString().Trim();
            }
        }

        private void btnGo_Click(object sender, EventArgs e)
        {
            deeptest();
        }

        public class DateHelper
        {
            public static double DateTimeToUnixTimestamp(DateTime dateTime)
            {
                return (TimeZoneInfo.ConvertTimeToUtc(dateTime) -
                         new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
            }
        }
        public async void deeptest()
        {
            double ret = DateHelper.DateTimeToUnixTimestamp(DateTime.Now);
            string urlLogin = "https://www2.deepl.com/jsonrpc";
         var allt = txtCollectFull.Text.ToString();
        string myJSONRequest = @"{""jsonrpc"":""2.0"",""method"": ""LMT_handle_jobs"",""params"":{""jobs"":[{""kind"":""default"",""raw_en_sentence"":"""
    + allt + @""",""raw_en_context_before"":[],""raw_en_context_after"":[],""preferred_num_beams"":4,""quality"":""fast""}],""lang"":{""user_preferred_langs"":[""EN"",""DE"",""ZH""],""source_lang_user_selected"":""ZH"",""target_lang"":""EN""},""priority"":-1,""commonJobParams"":{},""apps"":{""usage"":1},""timestamp"":" + ret + @"},""id"":54410005}";

            HttpClient hc = new HttpClient();
            hc.DefaultRequestHeaders.Add("Referer", "https://www.deepl.com/windows/translator?il=en&windows_app_version=1.12.1");
            hc.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0");
            hc.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.5");
            hc.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");


            var stringContent = new StreamContent(GenerateStreamFromString(myJSONRequest));
    

            using (var response = hc.PostAsync(urlLogin, stringContent).Result)
            {
                response.EnsureSuccessStatusCode();
                var responseBody = await response.Content.ReadAsStringAsync();
               rtbTranslate.Text = responseBody;
            }

        }

        static Stream GenerateStreamFromString(string s)
        {
            MemoryStream stream = new MemoryStream();
            StreamWriter writer = new StreamWriter(stream);
            writer.Write(s);
            writer.Flush();
            stream.Position = 0;
            return stream;
        }




    }
    
}
  • 1
    Use a sniffer like wireshark or fiddler and compare headers in first request between working and non work. Also check version of TLS which is used for authentication. The version of TLS is probably different from working. Just a guess. Easiest way of finding out is use a sniffer. – jdweng Sep 18 '20 at 11:52
  • DeepL Traslatorlink is Here, I need to send the Post to it and Get the Response. I have captured the chinese String here "txtCollectFull.Text" https://www.deepl.com/windows/translator?il=en&windows_app_version=1.12.1 – Fouad GoGo Sep 18 '20 at 16:08

0 Answers0