Как отправить запрос 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 - потому что уже сталкивался с ограничениями где я не мог использовать его...

 3
Author: Guilherme, 2013-12-17

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
 14
Author: fymoribe, 2013-12-20 11:22:02

Существует несколько способов сделать это с 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/

 5
Author: Danizord, 2014-01-29 12:20:59