Telegram + PHP (Windows 7):无法打开流:HTTP 请求失败! HTTP/1.1 404 未找到

Posted

技术标签:

【中文标题】Telegram + PHP (Windows 7):无法打开流:HTTP 请求失败! HTTP/1.1 404 未找到【英文标题】:Telegram + PHP (Windows 7): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found 【发布时间】:2016-01-25 06:57:08 【问题描述】:

我正在尝试在 Telegram 中迈出第一步,我也是 php 的新手......

我已经在我的 Windows 7 电脑上配置了带有 PHP 5.6.14 和 SSL 的 Apache 2.4,它在 http 和 https 中运行良好。

然后我尝试遵循此 Telegram Bot 教程https://www.youtube.com/watch?v=hJBYojK7DO4。一切正常,直到我必须创建一个像这样的简单 PHP 程序

<?php
  $botToken = "<my_bot_token>";
  $website = "https://api.telegram.org/bot".$botToken; 
  $update = file_get_contents($website."/getUpates"); 
  print_r($update);
?>

当我尝试放入浏览器时

https://localhost/Telegram/MyYouTubeTutorialBot/YouTubeTutorialBot.php

回应是

Warning: file_get_contents(https://api.telegram.org/<my_bot_token>/getupates): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in <my_php_file_location> on line 6

我在网上搜索过类似的问题,但没有解决任何问题:最有趣的回答是这个问题file_get_contents - failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found,但我不明白如何适应我的情况。

在其他回复中有使用 curl 的建议,但我想解决持续的 file_get_contents 功能。

我认为这不是 PHP 问题,而是我的配置中某处的问题......但我不知道在哪里

有什么建议吗?

非常感谢您

切萨雷

添加注释

正如@aeryaguzov 在 cmets 中建议的那样,我的原始代码中存在拼写错误......

这是现在可以使用的固定代码...

<?php
  $botToken = "<my_bot_token>";
  $website = "https://api.telegram.org/bot".$botToken; 
  $update = file_get_contents($website."/getUpdates"); 
  print_r($update);
?>

【问题讨论】:

我在您的警告中看到了 。你发送的是真正的令牌而不是这个占位符吗? 是的!有一个真正的令牌....... 也许你只是使用了错误的网址...试试 $website = "api.telegram.org/bot/".$botToken.''; ,还有什么 var_dump(base64_encode($website)); 给你? 我试过了,但没有任何改变.... var_dump(base64_encode($website)); 的结果以下是......字符串(100)“aHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdDE3MDE4NDEwMzpBQUVKbUVzbXo1MVVFbTM5aDc2T3NxcUlrVEZGX1MzNUQ4dw==" @Cesare 你的拼写再次无效:使用“getUpdates”而不是“getUpates” 【参考方案1】:

这不是您的配置中的 PHP 问题。 该错误表示文件https://api.telegram.org/&lt;my_bot_token&gt;/getupates不存在。

【讨论】:

我不这么认为,因为在浏览器中放置相同的 http 请求会得到正确的响应 ....【参考方案2】:

Telegram API 总是在其正文中返回 something。如果出现错误,这是一个 JSON 对象,其中 ok 设置为 falseerror_codedescription 字段。但是,它还将响应头设置为相关的错误代码,导致file_get_content() 抛出错误,而不是返回仍然非常有用的正文。为了避免这种情况,您可以像这样添加流上下文:

<?php
    $stream_context = stream_context_create(array(
        'http' => array (
            'ignore_errors' => true
         )
    ));

    $botToken = "<my_bot_token>";
    $website = "https://api.telegram.org/bot".$botToken;
    $update = file_get_contents($website."/getUpdates", false, $stream_context);
    print_r($update);
?>

【讨论】:

【参考方案3】:

我遇到了同样的错误。您可以尝试使用 JSON 进行检查,这是因为 webhook 正在运行

"ok":false,"error_code":409,"description":"Conflict: can't use getUpdates method while webhook is active"

您应该通过 删除您的机器人 API 的 webhook ...../setwebhook 没有 url。

【讨论】:

以上是关于Telegram + PHP (Windows 7):无法打开流:HTTP 请求失败! HTTP/1.1 404 未找到的主要内容,如果未能解决你的问题,请参考以下文章

PHP 中的 Telegram Bot 自定义键盘

Telegram bot php - 广播位置 - 如何读取更改?

PHP telegram bot:错误的请求:找不到编辑消息

如何创建 php 表单并集成链接到 Telegram 或 Whatsapp 的推送通知系统?

使用 Telegram - API 或 CLI 发送消息?

Telegram 向 webhook 发送重复的 POST JSON 请求