linux - 我在 Telegram 中发现了一个错误吗?
问题描述
我使用 Telegram 机器人将来自本地天气服务的天气警报整合到我的家庭自动化系统中。今天我发现了一个奇怪的问题,因为包含天气警报的消息没有发送。如果我在 Linux 上的 bash 中尝试此操作:(
output="Nationaal Hitteplan";curl "https://api.telegram.org/botxxxxxxxxx:longsecuritycode/sendMessage?chat_id=xxxxxxxxx&text=$output"
当然,我在上述命令中删除了我的个人令牌......)
然后我收到400 Bad Request并且没有发送消息。如果我将 output="Nationaal Hitteplan" 更改为 output="Nationaal hitteplan" 则消息将按预期发送。
我看不出这里有什么问题。Nationaal Hitteplan 一词基本上是一组关于在炎热天气中做什么的建议。它没有与之相关的负面含义,但显然 Telegram 检测到了问题。
除了如上所述更改术语之外,是否有人对此有解决方案?
解决方案
包含空格等特殊字符的 URL 应进行 url 编码。
使用以下 curl 命令让 curl 让编码:
token='xxxxxxxxx:longsecuritycode';
output="Nationaal Hitteplan";
curl -G \
--data-urlencode 'chat_id=1234567' \
--data-urlencode "text=${output}" \
"https://api.telegram.org/bot${token}/sendMessage"
推荐阅读
- android - 单击android自定义键盘中的表情符号键时如何显示表情符号键盘?
- c# - c#中使用obex读取手机通讯录
- java - 从 JENKINS 触发构建时出现“无法在中央找到工件 com.oracle:ojdbc6:jar:6.0.0”的错误
- unit-testing - 集成单元测试未在 ASP.NET 核心 MVC/Web API 中运行
- python - Python以CBC加密方式实现AES
- javascript - 获取匹配区间
- c# - 反序列化 JSON 对象时出错“解析值时遇到意外字符:<。路径 '',第 0 行,位置 0。”
- ruby-on-rails - 如何将 class_name 选项传递给生成器?
- java - java复杂的if语句导致StackOverflowError
- python - 如何在 python 脚本中解析列格式的文本以提供特定的输出