Не могу опубликовать большие статьи на русском в telegraph через api. Что делать?

Основной вопрос описан в заголовке. Детали- Есть бот, который публикует статьи в телеграфе, конвертируя полученный от пользователя docx документ в Node с сохранением форматирования, адаптируя под telegra.ph. И всё вроде работает, когда всякие большие lorem ipsum загружаю, но когда такого же размера текст на русском, возвращается bad request. Я протестил это на c#:

string token = "my token";
HttpClient client = new();
string content =node.Serialize();//node-объект типа Node, создаю из вне
content = content.Replace(",\"attrs\":null",null);//пустые attrs удаляю из текста, чтобы лишний раз не отправлять лишней информации
string request = $"https://api.telegra.ph/createPage?access_token={token}&title=Lorem+ipsum2&content={content}";
var response=await client.GetAsync(request);
string rStr = await response.Content.ReadAsStringAsync();

и на python, но node я предварительно сериализовал через основной код в шарпе и закинул в файл:

import requests
f=open('D:\\Users\\Admin\\Рабочий стол\\doc.txt','r')
content=f.read()
f.close()
token='мой токен'
res=requests.get(f'https://api.telegra.ph/createPage?token={token}&content={content}&title=MyTitle')
print(res)

И использую везде get-запрос вместо post, т.к по-другому не работает, хоть и в документации (https://telegra.ph/api) указано обратное:

var content = domToNode(article).children;
$.ajax('https://api.telegra.ph/createPage', {
  data: {
    access_token:   '%access_token%',
    title:          'Title of page',
    content:        JSON.stringify(content),
    return_content: true
  },
  type: 'POST',
  dataType: 'json'

Я подумал, что закинув все аргументы в тело запроса, заработает, но, как оказалось, нет. Ведёт себя так, будто бы я ему передавал бы GET https://api.telegra.ph/createPage и требует access_token, а не POST. Похоже, что это связано с тем, что русские символы представлены не одним, а несколькими при передачи в url и поэтому размер такого "текста" превышает 64 кб, что описано как максимальный размер передаваемой статьи в документации. Моё предположение. Тем не менее, ребят, что делать с публикацией на русском? Скажите пожалуйста, всю голову сломал. Есть какие-нибудь обходные пути?


Ответы (1 шт):

Автор решения: Freemoon

Всем шарпистам сообщаю, что всё-таки через POST апи телеграфа работает, но! Нужно указывать тип контента непосредственно после инициализации контента и запроса. Короче, вот рабочий код:

dynamic info = new
        {
            title = "My post",
            content = content,
            access_token =token
        };
        
        string requestPath = $"https://api.telegra.ph/createPage";
        string serialized = JsonConvert.SerializeObject(info);
//обязательно укажите кодировку utf-8
        StringContent webContent = new StringContent(serialized,Encoding.UTF8);
        HttpRequestMessage request = new(HttpMethod.Post, requestPath) { Content=webContent};
        request.Content.Headers.ContentType=new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
        var response=await client.SendAsync(request);
        string responseStr = await response.Content.ReadAsStringAsync();//и делайте с этой переменной что хотите
→ Ссылка