电报请求“打开失败无法打开流:HTTP请求失败!HTTP / 1.1 400错误请求”

时间:2020-08-29 13:50:45

标签: javascript php telegram

我正在尝试向电报机器人发送消息。确实是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

1 个答案:

答案 0 :(得分:0)

这里的主要问题是您需要将西里尔字母编码为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评论,以寻找其他人寻找答案。