через js fetch работает, но через C# выдаёт ошибку - access
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 07.03.23 15:39
Оценка:
этот код не работает, пишет что я забанен
            using (HttpClient httpClient = new HttpClient())
            {
                var jsonObject = new
                {
                    format = "text",
                    from = from.ToString(),
                    input = text,
                    options = new
                    {
                        contextResults = true,
                        languageDetection = false,
                        origin = "translation.web",
                        sentenceSplitter = true,
                    },
                    to = to.ToString(),
                };

                httpClient.DefaultRequestHeaders.Add("Referrer", "https://www.reverso.net/");//Referrer = new Uri("https://www.reverso.net/");
                httpClient.DefaultRequestHeaders.Add("ReferrerPolicy", "strict-origin-when-cross-origin");
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://api.reverso.net/translate/v1/translation");
                request.Content = new StringContent(JsonConvert.SerializeObject(jsonObject), Encoding.UTF8, "application/json");
                request.Headers.Add("mode", "cors");
                request.Headers.Add("credentials", "omit");
                request.Headers.Add("sec-fetch-dest", "empty");
                request.Headers.Add("sec-fetch-mode", "cors");
                request.Headers.Add("sec-fetch-site", "same-site");
                request.Headers.Add("x-reverso-origin", "translation.web");
                
                request.Headers.Add("accept-language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,la;q=0.6,uk;q=0.5,bg;q=0.4");
                request.Headers.Add("cache-control", "no-cache");
                request.Headers.Add("pragma", "no-cache");
                
                request.Headers.Add("sec-ch-ua", "\"Chromium\";v=\"110\", \"Not A(Brand\";v=\"24\", \"Google Chrome\";v=\"110\"");
                request.Headers.Add("sec-ch-ua-mobile", "?0");
                request.Headers.Add("sec-ch-ua-platform", "\"Windows\"");

                HttpResponseMessage result = null;
                try
                {
                    result = httpClient.SendAsync(request).Result;
                    result.EnsureSuccessStatusCode();
                }
                catch (Exception ex)
                {

                }


ниже код работает
<script>
    fetch("https://api.reverso.net/translate/v1/translation", {
        "headers": {
            "accept": "application/json, text/plain, */*",
            "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,la;q=0.6,uk;q=0.5,bg;q=0.4",
            "cache-control": "no-cache",
            "content-type": "application/json",
            "pragma": "no-cache",
            "sec-ch-ua": "\"Chromium\";v=\"110\", \"Not A(Brand\";v=\"24\", \"Google Chrome\";v=\"110\"",
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-platform": "\"Windows\"",
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "same-site",
            "x-reverso-origin": "translation.web"
        },
        "referrer": "https://www.reverso.net/",
        "referrerPolicy": "strict-origin-when-cross-origin",
        "body": 
        
        "{\"format\":\"text\",\"from\":\"rus\",\"to\":\"eng\",\"input\":\"привет\",\"options\":{\"sentenceSplitter\":true,\"origin\":\"translation.web\",\"contextResults\":false,\"languageDetection\":false}}",
        
        //"{\"format\":\"text\",\"from\":\"eng\",\"to\":\"rus\",\"input\":\"привет\",\"options\":{\"sentenceSplitter\":true,\"origin\":\"translation.web\",\"contextResults\":true,\"languageDetection\":true}}",
        "method": "POST",
        "mode": "cors",
        "credentials": "omit"
    });
</script>

в постмане аналогично все заголовки переписал, но выдаёт ошибку

подскажите пожалуйста чего не хватает
Отредактировано 07.03.2023 15:40 dsalodki . Предыдущая версия .
Re: через js fetch работает, но через C# выдаёт ошибку - access
От: vsb Казахстан  
Дата: 07.03.23 15:55
Оценка:
Ну тут много причин может быть. Если на 100% уверен, что запрос идентичен, значит они смотрят на какие-то нюансы реализации TLS или HTTP стека, которые отличаются в дотнете и в браузере.
Re: через js fetch работает, но через C# выдаёт ошибку - access
От: vmpire Россия  
Дата: 07.03.23 16:09
Оценка: +1
Здравствуйте, dsalodki, Вы писали:

D>этот код не работает, пишет что я забанен

...

D>ниже код работает

...
D>
D><script>
...
D></script>
D>

D>подскажите пожалуйста чего не хватает
Код, который работает, выполняется в браузере? Если да, то, скорее всего, не хватает авторизационной куки.
Изучите внимательно запрос, который работает на предмет всех хидеров.
Re[2]: через js fetch работает, но через C# выдаёт ошибку - access
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 07.03.23 16:30
Оценка: 11 (1) +1
Оказалось всё просто, user-agent не хватало
Re[2]: через js fetch работает, но через C# выдаёт ошибку - access
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.03.23 18:08
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>Ну тут много причин может быть. Если на 100% уверен, что запрос идентичен, значит они смотрят на какие-то нюансы реализации TLS или HTTP стека, которые отличаются в дотнете и в браузере.


Очень маловероятно. Я бы поставил на разницу в заголовках запроса. И искать надо внимательно, про всякие там куки тоже не забывать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.