POST-запрос к PHP REST API работает только на Postman

Я пытаюсь создать и получить доступ к своему первому API отдыха, и у меня возникают проблемы с СООБЩЕНИЕ Запросы. Если я проверю свой 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();
}

И это часть функции, которую я использую для вызова метода create моего 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');

Здесь я продолжаю получать сообщение внутри если который проверяет, если $ Данных-> id_sala пустой. Но когда я отправляю те же данные с помощью Postman, они не пустые. Для целей первого API я хочу использовать только чистый PHP. Нет внешних библиотек, как пропивать или что-нибудь в этом роде. Итак, кто-нибудь может мне помочь?

ОБНОВИТЬ:
Изменив заголовок вызова для отправки в формате 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);

Спасибо за помощь.

0

Решение

Вы отправляете:

"Content-type: application/x-www-form-urlencoded\r\n".

… но пытаюсь читать:

json_decode(file_get_contents("php://input"));

Поскольку вы не отправляете JSON, происходит сбой.

Просто прочитайте URL закодированные данные из $_POST,

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector