Я пытаюсь создать и получить доступ к своему первому API отдыха, и у меня возникают проблемы с запросами POST .Если я тестирую свой API на Почтальоне , он работает просто отлично.Я могу читать, удалять и т. Д.
Но теперь я хочу отправить данные html формы с помощью PHP в мой API для создания новой записи в базе данных.Я использую только PHP и Mysql для проекта.И я попытался использовать CURL и file_gets_content , но безуспешно.
В результате получается, что массив, который получает API, всегда пуст .Я отлаживаю каждый шаг прямо перед вызовом, и массив не пустой, поэтому я представляю, что с самим вызовом что-то не так.
Вот часть моего create.php получает данные по моему API:
<?php
//configuracao de headers
// Headers
header('Access-Control-Allow-Origin: *');
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
include_once('../../config/Banco.php');
include_once('../../models/Curso.php');
$banco = new Banco();
$conexao = $banco->conecta();
$curso = new Curso($conexao);
//pega o q foi submetido
$data = json_decode(file_get_contents("php://input"));
if (empty($data->id_sala)){
echo json_encode(array('mensagem'=>'Preencha o id_sala'));
die();
}
И это часть функции, которую я использую для вызова метода создания моего API:
function criar_curso($nome, $id_professor, $id_sala, $horario_inicio, $horario_fim){
$url = "http://localhost/desafio-fullstack/api/curso/create.php";
// Parametros da requisição
$data = http_build_query(array(
'nome' => $nome,
'id_professor' => $id_professor,
'id_sala' => $id_sala,
'horario_inicio' => $horario_inicio,
'horario_fim' => $horario_fim
));
$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => "Connection: close\r\n".
"Content-type: application/x-www-form-urlencoded\r\n".
"Content-Length: ".strlen($data)."\r\n",
'content' => $data
)
));
$contents = file_get_contents($url, null, $context);
$resposta = json_decode($contents); //Parser da resposta Json
var_dump($resposta);
die('antes do direcionamento dentro do criar curso');
Здесь я хранюполучение сообщения внутри if , которое проверяет, является ли $ data-> id_sala пустым.Но когда я отправляю те же данные с помощью Postman, они не пустые.Для целей первого API я хочу использовать только чистый PHP.Никаких внешних библиотек вроде Guzzle или чего-то в этом роде.Итак, кто-нибудь может мне помочь?
ОБНОВЛЕНИЕ: Изменяя заголовок при вызове для отправки в формате json, я смог правильно отправить данные в API:
$opcoes = array(
'http' => array(
'header' => "Content-type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($data)
)
);
$context = stream_context_create($opcoes);
$retorno = file_get_contents($url, false, $context);
Спасибо за помощь.