Задать вопрос
@maus_9999

Почему тг бот обрезает сообщение?

Почему-то Телеграм бот при отправке вот такого сообщения:

goods/42080?from=market#&tab=selling&page_num=1&sort_by=paintwear.asc&max_price=2.1

обрезает последнюю часть и получается в итоге goods/35505?from=market".

Вот код самого Телеграм бота:

def snd_msg(url1):
 token1 = str(token)
 url_req = f'https://api.telegram.org/bot{token1}/sendMessage?chat_id={chat_id}&text={url1}'
 results = requests.get(url_req)
 print('СООБЩЕНИЕ ОТПРАВЛЕНО')

Как можно решить данную проблему?
  • Вопрос задан
  • 573 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
SERGK393
@SERGK393
Программист
Попробуй вот так
def snd_msg(url1):
 token1 = str(token)
 params = {
    "chat_id": chat_id,
    "text": url1,
 }
 results = requests.get(
    "https://api.telegram.org/bot{}/sendMessage".format(token1),
    params=params
 )
 print('СООБЩЕНИЕ ОТПРАВЛЕНО')
Ответ написан
Комментировать
shurshur
@shurshur
Сисадмин, просто сисадмин...
Ответ, который уже помечен галочкой, конечно же поможет решить данную конкретную проблему, но его яркий недостаток в том, что автор вопроса так и не поймёт, в чём же именно проблема состояла. А это очень важно понимать, так как с такой же проблемой можно столкнуться и в других ситуациях.

Проблема заключается в том, что & является разделителем аргументов GET-запроса. На первом же & в тексте будет считаться, что значение параметра text закончилось, а дальше идёт следующий параметр.

Чтобы этого не происходило, надо заменять & на %26. Пробел надо менять на +, + менять на %2B, и это далеко не всё, с чем можно столкнуться. В частности, символ # в некоторых применениях является ссылкой на якорь на странице, и http-клиент (например, браузер) не будет передавать в запросе ничего, начиная с этого символа, если его не заменить на %23.

Чтобы это решить в данном случае, наиболее удобный способ - это передать параметры отдельным аргументом params метода requests.get, чтобы библиотека requests сама грамотно разрулила все необходимые замены. Но если это недоступно для решения какой-то другой задачи - искать как выполнить соответствующее преобразование надо по ключевым словам urlencode/urldecode.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы