Как отправить запрос POST в REST API в PHP?
, Полагаю, достаточно просто выполнить запрос GET, как правило, я использую:
//$serverurl contem a url da api para a função desejada
try {
$cursos = file_get_contents($serverurl);
} catch (Exception $e) {
}
После получения json отклика, использую json_decode()
и работы с этими данными.
, Но у меня возникли трудности в выполнении запроса POST, где мне нужно передать некоторые параметры для веб-службы.
я Хотел бы знать лучший способ выполнить это.
, Если это возможно, не намеревался использовать curl - потому что уже сталкивался с ограничениями где я не мог использовать его...
2 answers
Я Использовал следующий фрагмент кода, чтобы сделать запрос POST для API:
$servidor = $_POST['servidor'];
// Parametros da requisição
$content = http_build_query(array(
'txtXML' => $_POST['txtXML']
));
$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($content)."\r\n",
'content' => $content
)
));
// Realize comunicação com o servidor
$contents = file_get_contents($servidor, null, $context);
$resposta = json_decode($contents); //Parser da resposta Json
Существует несколько способов сделать это с PHP, самый распространенный способ-это использование библиотеки curl:
$url = 'http://server.com';
$data = ['key' => 'value'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
Curl предоставляет client HTTP полным и гибким. Проверьте документацию по curl, чтобы изучить все доступные функции и параметры, чтобы настроить заявок: http://php.net/manual/pt_BR/book.curl.php
Несмотря на то, что curl проста в использовании, есть библиотеки, сделанные на PHP, как Guzzle, которые обеспечивают уровень абстракции объектно-ориентированного в верхней части завиток, делая код намного более читаемым и элегантный:
use Guzzle\Http\Client;
$client = new Client('http://server.com/');
$request = $client->post('users', $headers, $data);
$response = $request->send();
Кстати, Guzzle также имеет отличный документации: http://guzzlephp.org/