В чем причина ошибки net::ERR_ABORTED 405 (Method Not Allowed)?
Пытаюсь создать форму для отправки сообщения из формы в телеграм-бота, запускаю код в расширении LiveServer, но по какой-то причине это не работает. PHP-код:
<?php
$content = "";
foreach ($_POST as $key => $value) {
if ($value) {
$content .= " <b> $key </b>: <i> $value </i> \n";
}
}
if (trim($content)) {
$content = "<b> From Site: </b> \n".$content;
$apiToken = ""; // Вставьте сюда API-токен бота
$data = [
"chat_id" => "", // Вставьте сюда chat_id
"text" => $content,
"parse_mode" => "HTML",
];
$response = file_get_contents(
"https://api.telegram.org/bot/$apiToken/sendMessage?".http_build_query($data)
);
}
?>
JS-код:
"use strict";
document.addEventListener("DOMContentLoaded", function () {
const form = document.querySelector(".send-message-form");
form.addEventListener("submit", function (e) {
e.preventDefault();
sendMessage(form);
});
async function sendMessage(form) {
const formData = new FormData(form);
if (formData) {
const url = "sendMessage.php";
const response = await fetch(url, {
method: "POST",
body: formData,
});
if (response.ok) {
form.reset();
alert("Сообщение успешно отправлено!");
} else {
alert("Ошибка :(");
}
}
}
});
В чём может быть проблема? Может из-за того, что я запускаю скрипты на Live Server?
Ответы (2 шт):
Автор решения: abu
→ Ссылка
Запрос на отправку сообщения предполагает метод POST
https://telegram-bot-sdk.readme.io/reference/sendmessage
Вы используете file_get_contents
, который имитирует метод GET
- отсюда ошибка
Вам стоит использовать библиотеку HTTP клиента, например, https://github.com/guzzle/guzzle
Автор решения: Алексей Шиманский
→ Ссылка
Думаю ошибка в простом. Надо писать не
bot/$apiToken
а вот так:
bot{$apiToken}
то есть токен идёт сразу после текста "bot"