我正在尝试创建和访问我的第一个Rest API,但遇到 POST 请求时遇到了麻烦。如果我在 Postman 上测试了我的API,它就可以正常工作。我可以阅读,删除等。
但是现在我想使用PHP将 html表单的数据发送到我的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的create方法的函数的一部分:
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);
感谢您的帮助。
答案 0 :(得分:1)
您正在发送:
"Content-type: application/x-www-form-urlencoded\r\n".
…但尝试阅读:
json_decode(file_get_contents("php://input"));
由于您未发送JSON,因此失败。
只需从$_POST
中读取URL编码数据即可。