如何解决电报请求“打开失败无法打开流:HTTP请求失败!HTTP / 1.1 400错误请求”
我正在尝试向电报机器人发送消息。确实是name变量不允许我这样做。
$arr = array(
$phoneFieldset => $phone,$nameFieldset => $name,$messageFieldset => $message,);
foreach($arr as $key => $value) {
$txt .= "<b>".$key."</b> ".$value."%0A";
};
$request = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}";
echo $request;
$sendToTelegram = fopen($request,"r");
当脚本失败时,请求回显输出:
https://api.telegram.org/botMYTOKEN/sendMessage?chat_id=-449128489&parse_mode=html&text=Телефон: 123%0AИмя: de%0AСообщение: 123213%0A
警告:fopen(https://api.telegram.org/botMYTOKEN/sendMessage?chat_id=-449128489&parse_mode=html&text= Телефон: 123%0A Имя: de%0A Сообщение: 123213%0A):无法打开流:HTTP请求失败!第61行的C:\ nginx \ html \ scripts \ php \ send-message-to-telegram.php中的HTTP / 1.1 400错误请求 Ошибка。 Сообщениенеотправлено!
第61行是包含fopen()
的行。
脚本工作时请求回显输出:
https://api.telegram.org/botMYTOKEN/sendMessage?chat_id=-449128489&parse_mode=html&text=Телефон: 123123%0AСообщение: 1213123%0A
解决方法
这里的主要问题是您需要将西里尔字母编码为URL实体。您可以使用rawurlencode($txt)
进行操作。查看下面的完整代码:
$arr = array(
$phoneFieldset => $phone,$nameFieldset => $name,$messageFieldset => $message,);
foreach($arr as $key => $value) {
$txt .= "<b>".$key."</b> ".$value."%0A";
};
$txt = rawurlencode($txt) // To encode cyrillic entities
$request = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}";
echo $request;
$sendToTelegram = fopen($request,"r");
P.S。摘自@ ed-lucas评论,以寻找其他人寻找答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。