Я пытаюсь создать и получить доступ к своему первому 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);
Спасибо за помощь.
Вы отправляете:
"Content-type: application/x-www-form-urlencoded\r\n".
… но пытаюсь читать:
json_decode(file_get_contents("php://input"));
Поскольку вы не отправляете JSON, происходит сбой.
Просто прочитайте URL закодированные данные из $_POST
,
Других решений пока нет …