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?
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
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
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.
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