Помогите переделать post запрос на C#

panacea

Client
Регистрация
27.04.2015
Сообщения
97
Благодарностей
27
Баллы
18
Отправляю картинку в api telegram по средствам post запроса через стандартный кубик и всё работает, но вот попытался переписать на C# и не могу понять в чем дело, сам в c# не силен, сделал по примерам с форма, но что-то никак не выходит.

Вот данные которые передаются в запросе

--1fb86806-7d2e-405f-b361-a85eb2524129
Content-Disposition: form-data; name="chat_id"

{-Variable.chat_id-}
--1fb86806-7d2e-405f-b361-a85eb2524129
Content-Disposition: form-data; name="photo"; filename="{-Variable.file_name-}"
Content-Type: image/jpeg

{-Variable.Surl_img-}

Вот как я пытаюсь сделать тоже самое на C#

Код:
string token = "тут токен";
string BaseUrl = "https://api.telegram.org/bot";
string address = BaseUrl + token + "/sendPhoto";
string chat_id = project.Variables["chat_id"].Value;
string sPhoto = project.Variables["Surl_img"].Value;
string file_name = project.Variables["file_name"].Value;

            string boundary = "--1fb86806-7d2e-405f-b361-a85eb2524129";
            string data = "";
            data += boundary + "\n";
            data += "Content - Disposition: form - data; name =\"chat_id\""+ "\n\n";
            data += chat_id+"\n";
            data += boundary + "\n";
            data += string.Format("Content-Disposition: form-data; name=\"photo\"; filename=\"{0}\"\n", file_name);
            data += "Content - Type: image / jpeg \n\n";
            data += sPhoto;
                    
            var resultHttpPost = ZennoPoster.HttpPost(address, data, " multipart/form-data", "", "utf-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody, 30000, "", "", true, 5);
Но получаю ошибку {"ok":false,"error_code":400,"description":"Bad Request: there is no photo in the request"}

Что я делаю не так?
 

CheshireCat

Пользователь
Регистрация
07.03.2018
Сообщения
30
Благодарностей
13
Баллы
8
Зачем мучить себе, в зенке же можно использовать сторонние библиотеки
Не изобретая, так сказать, велосипед
Поищите на гитхабе нужное
Как я понимаю, вы хотите использовать Bot API
Я эту использовал:
https://github.com/TelegramBots/Telegram.Bot
Если будут вопросы можете написать в лс, попробую помочь
 
  • Спасибо
Реакции: panacea

CheshireCat

Пользователь
Регистрация
07.03.2018
Сообщения
30
Благодарностей
13
Баллы
8
Что такое будет:
var _client = new Telegram.Bot.TelegramBotClient(project.Variables["api_key"].Value);
var _chat = project.Variables["chat_id"].Value;
using (var _stream = File.Open("путь к файлу", FileMode.Open))
{
var file = new FileToSend("имя файла", photoStream);
await Bot.SendPhoto(chatId, file);
}
 

panacea

Client
Регистрация
27.04.2015
Сообщения
97
Благодарностей
27
Баллы
18
Зачем мучить себе, в зенке же можно использовать сторонние библиотеки
Не изобретая, так сказать, велосипед
Поищите на гитхабе нужное
Как я понимаю, вы хотите использовать Bot API
Я эту использовал:
https://github.com/TelegramBots/Telegram.Bot
Если будут вопросы можете написать в лс, попробую помочь
Дело в том, что у меня уже всё готово, что касается телеграм. Нужно лишь один этот запрос сделать. Плюс в будущем может быть похожая проблема на другом сайте, поэтому я хочу знать, что не так в моём примере. Но все равно, спасибо.
 

CheshireCat

Пользователь
Регистрация
07.03.2018
Сообщения
30
Благодарностей
13
Баллы
8
Дело в том, что у меня уже всё готово, что касается телеграм. Нужно лишь один этот запрос сделать. Плюс в будущем может быть похожая проблема на другом сайте, поэтому я хочу знать, что не так в моём примере. Но все равно, спасибо.
Вот еще нашел пример

var url = string.Format("https://api.telegram.org/bot{0}/sendPhoto", token);
var fileName = filePath.Split('\\').Last();

using (var form = new MultipartFormDataContent())
{
form.Add(new StringContent(chatId.ToString(), Encoding.UTF8-), "chat_id");

using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
form.Add(new StreamContent(fileStream), "photo", fileName);

using (var client = new HttpClient())
{
await client.PostAsync(url, form);
}
}
}
 

CheshireCat

Пользователь
Регистрация
07.03.2018
Сообщения
30
Благодарностей
13
Баллы
8
Вот еще нашел пример

var url = string.Format("https://api.telegram.org/bot{0}/sendPhoto", token);
var fileName = filePath.Split('\\').Last();

using (var form = new MultipartFormDataContent())
{
form.Add(new StringContent(chatId.ToString(), Encoding.UTF8-), "chat_id");

using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
form.Add(new StreamContent(fileStream), "photo", fileName);

using (var client = new HttpClient())
{
await client.PostAsync(url, form);
}
}
}
Только если будете этот код брать - вместо await client.PostAsync пишем просто client.Post(ваши параметры)
 

panacea

Client
Регистрация
27.04.2015
Сообщения
97
Благодарностей
27
Баллы
18
Ночью сегодня ковырялся, х.з. что сделал в полусонном состоянии, но теперь с передачей фото проблем похоже нет, зато не передается chat_id (facepalm)

Сделал тестовый проект кому не сложно посмотрите. Все данные там заполнены, нужно только запустить. Выполнится стандартный кубик post запроса и фотка отправится в канал https://t.me/test_canale435
Рядом с кубиком снипет, который никак не хочет работать. Думаю упускаю какую-то мелочь.

Вот что фиддлер показывает при отправке кубиком
2018-08-05_094123.png

А это при отправке снипетом

2018-08-05_094358.png

Проект прикрепляю
 

Вложения

  • 56,2 КБ Просмотры: 39

CheshireCat

Пользователь
Регистрация
07.03.2018
Сообщения
30
Благодарностей
13
Баллы
8
Ночью сегодня ковырялся, х.з. что сделал в полусонном состоянии, но теперь с передачей фото проблем похоже нет, зато не передается chat_id (facepalm)

Сделал тестовый проект кому не сложно посмотрите. Все данные там заполнены, нужно только запустить. Выполнится стандартный кубик post запроса и фотка отправится в канал https://t.me/test_canale435
Рядом с кубиком снипет, который никак не хочет работать. Думаю упускаю какую-то мелочь.

Вот что фиддлер показывает при отправке кубиком
Посмотреть вложение 31239

А это при отправке снипетом

Посмотреть вложение 31240

Проект прикрепляю

Для вашего бота chat_id "@test_canale435" - всё равно что ничего)
Это совсем не то.
Для того чтобы chat_id узнать, нужно что-то написать в чате/канале/личной переписке и по ссылке
https://api.telegram.org/bot647705658:AAFgX9vNiP9IwZr-8PbLjJ_V8w-OdoweqDw/getUpdates
Получить список обновлений, найти нужный чат/канал/переписку по заголовку или юзернейму, и затем из нужного получить chat_id
обычно это набор цифр, насколько помню, но никак не имя канала)
Документацию почитайте хорошенько, будет проще
https://tlgrm.ru/docs/bots/api
Например здесь

Вот что я получил по ссылке с обновлениями:
{"ok":true,"result":[{"update_id":313197205,
"message":{"message_id":2,"from":{"id":632354417,"is_bot":false,"first_name":"csac","last_name":"casca","language_code":"ru-RU"},"chat":{"id":632354417,"first_name":"csac","last_name":"casca","type":"private"},"date":1533448995,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":313197206,
"message":{"message_id":3,"from":{"id":632354417,"is_bot":false,"first_name":"csac","last_name":"casca","language_code":"ru-RU"},"chat":{"id":632354417,"first_name":"csac","last_name":"casca","type":"private"},"date":1533456245,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}

беру отсюда айди 632354417
Попробовал отправить - пришло или нет?)
 

CheshireCat

Пользователь
Регистрация
07.03.2018
Сообщения
30
Благодарностей
13
Баллы
8
Было бы проще линк на бота дать, чтобы самому пообщаться :-)
 

panacea

Client
Регистрация
27.04.2015
Сообщения
97
Благодарностей
27
Баллы
18
Для вашего бота chat_id "@test_canale435" - всё равно что ничего)
Это совсем не то.
Для того чтобы chat_id узнать, нужно что-то написать в чате/канале/личной переписке и по ссылке
https://api.telegram.org/bot647705658:AAFgX9vNiP9IwZr-8PbLjJ_V8w-OdoweqDw/getUpdates
Получить список обновлений, найти нужный чат/канал/переписку по заголовку или юзернейму, и затем из нужного получить chat_id
обычно это набор цифр, насколько помню, но никак не имя канала)
Документацию почитайте хорошенько, будет проще
https://tlgrm.ru/docs/bots/api
Тут ты не прав. В канал что я отправляю бот является там админом, поэтому это именно то, что нужно передавать. Бот не ведет никаких переписок, только отправляет фотки в канал.
 

panacea

Client
Регистрация
27.04.2015
Сообщения
97
Благодарностей
27
Баллы
18

CheshireCat

Пользователь
Регистрация
07.03.2018
Сообщения
30
Благодарностей
13
Баллы
8
Для вашего бота chat_id "@test_canale435" - всё равно что ничего)
Это совсем не то.
Для того чтобы chat_id узнать, нужно что-то написать в чате/канале/личной переписке и по ссылке
https://api.telegram.org/bot647705658:AAFgX9vNiP9IwZr-8PbLjJ_V8w-OdoweqDw/getUpdates
Получить список обновлений, найти нужный чат/канал/переписку по заголовку или юзернейму, и затем из нужного получить chat_id
обычно это набор цифр, насколько помню, но никак не имя канала)
Документацию почитайте хорошенько, будет проще
https://tlgrm.ru/docs/bots/api
Например здесь

Вот что я получил по ссылке с обновлениями:
{"ok":true,"result":[{"update_id":313197205,
"message":{"message_id":2,"from":{"id":632354417,"is_bot":false,"first_name":"csac","last_name":"casca","language_code":"ru-RU"},"chat":{"id":632354417,"first_name":"csac","last_name":"casca","type":"private"},"date":1533448995,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":313197206,
"message":{"message_id":3,"from":{"id":632354417,"is_bot":false,"first_name":"csac","last_name":"casca","language_code":"ru-RU"},"chat":{"id":632354417,"first_name":"csac","last_name":"casca","type":"private"},"date":1533456245,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}

беру отсюда айди 632354417
Попробовал отправить - пришло или нет?)
Извиняюсь, по юзернейму тоже можно)
 

panacea

Client
Регистрация
27.04.2015
Сообщения
97
Благодарностей
27
Баллы
18
Как оказалось chat_id можно и так передавать:bm:
Код:
string address = BaseUrl + token + "/sendPhoto?chat_id=" + chat_id;
Теперь всё работает.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)