Enviar solicitud JSON POST con PHP

3 minutos de lectura

Avatar de usuario de CMartins
CMartins

Tengo estos datos JSON:

{ 
    userID: 'a7664093-502e-4d2b-bf30-25a2b26d6021',
    itemKind: 0,
    value: 1,
    description: 'Saude',
    itemID: '03e76d0a-8bab-11e0-8250-000c29b481aa'
}

y necesito publicar en la URL JSON: http://domain/OnLeagueRest/resources/onleague/Account/CreditAccount

¿Cómo puedo enviar esta solicitud POST usando PHP?

  • Realmente, cargar una cuenta sobre http! Por favor use https ¡y un formulario de JWS para verificar quién lo envió!

    – Hack5

    24 de junio de 2017 a las 6:54

Avatar de usuario de Muhammad Zeeshan
Mohamed Zeeshan

Puede usar CURL para este propósito, vea el código de ejemplo:

$url = "your url";    
$content = json_encode("your data to be sent");

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
        array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);

$json_response = curl_exec($curl);

$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ( $status != 201 ) {
    die("Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
}


curl_close($curl);

$response = json_decode($json_response, true);

  • ejemplo de curl y notas de usuario en el manual de php

    – El fabricante de herramientas Steve

    10 de abril de 2019 a las 9:15

  • Está dando un error de sintaxis entre paréntesis, si pasamos el objeto json a la función de codificación json.

    – Rajat

    28 de septiembre de 2020 a las 21:34

Avatar de usuario de David Riccitelli
david riccitelli

Sin usar ninguna dependencia o biblioteca externa:

$options = array(
  'http' => array(
    'method'  => 'POST',
    'content' => json_encode( $data ),
    'header'=>  "Content-Type: application/json\r\n" .
                "Accept: application/json\r\n"
    )
);

$context  = stream_context_create( $options );
$result = file_get_contents( $url, false, $context );
$response = json_decode( $result );

$response es un objeto Se puede acceder a las propiedades como de costumbre, p. $response->...

dónde $data es la matriz que contiene sus datos:

$data = array(
  'userID'      => 'a7664093-502e-4d2b-bf30-25a2b26d6021',
  'itemKind'    => 0,
  'value'       => 1,
  'description' => 'Boa saudaÁ„o.',
  'itemID'      => '03e76d0a-8bab-11e0-8250-000c29b481aa'
);

Advertencia: esto no funcionará si el allow_url_fopen el ajuste se establece en Off en el archivo php.ini.

Si está desarrollando para WordPress, considere usar las API proporcionadas: https://developer.wordpress.org/plugins/http-api/

  • Los encabezados de respuesta sin procesar de @solarshado se pueden obtener con stream_get_meta_data.

    – Daniels118

    28 de abril de 2017 a las 7:41

  • Una pequeña sugerencia de mejora, también podría colocar los encabezados en una matriz, especialmente si es necesario agregar más encabezados, como Autorización. En ese caso, el “\r\n” debería no ser agregado.

    – cero0cool

    9 de agosto de 2017 a las 14:55


Avatar de usuario de OndrejC
OndrejC

cuidado con eso file_get_contents la solución no cierra la conexión como debería cuando un servidor regresa Connection: close en el encabezado HTTP.

La solución CURL, por otro lado, finaliza la conexión para que el script PHP no se bloquee esperando una respuesta.

¿Ha sido útil esta solución?