2011-05-24 27 views
23

Estoy usando Curl desde la línea de comandos para depurar una pequeña API web en la que estoy trabajando. La API web espera autenticación básica y un objeto JSON como entrada (POST). Actualmente esta autenticaciones básicas funciona bien:POST JSON sobre CURL con autenticación básica

curl -i --user validuser:70e12a10-83c7-11e0-9d78-0800200c9a65 http://example.com/api.php 

pero también quieren enviar un objeto JSON como una solicitud POST:

curl -i --user validuser:70e12a10-83c7-11e0-9d78-0800200c9a65 -X POST -d '{"person":{"name":"bob"}}' http://example.com/api.php 

estoy recibiendo una respuesta 400 Bad Request con el comando anterior, cualquier ideas sobre cómo paquete un objeto json en esta solicitud POST?

Respuesta

50

Probar con:

curl -i --user validuser:70e12a10-83c7-11e0-9d78-0800200c9a65 -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{"person":{"name":"bob"}}' http://mysite.com/api.php 

He eliminado el bit json= en el contenido del cuerpo.

Alternativamente, este post podría ser útil: How to post JSON to PHP with curl

+0

Funcionó bien, gracias hombre! – 2bard

1

No utilice

$person = file_get_contents("php://input"); 

en lugar de utilizar

$person = $_POST['person']; 

Y si usted está utilizando rizo desde la línea de comandos Esta es la sintaxis para querer para enviar datos JSON:

curl -d 'person={"name":"bob"}' 
+1

De los diversos hilos que he leído sobre este tema, file_get_contents ("php: // input"), parece ser la forma habitual de recuperación el cuerpo sin procesar de la solicitud posterior. – 2bard

+0

@LBNerdBard define "estándar". –

+0

Debería haber dicho 'más sensible' en lugar de 'estándar', porque no estoy procesando datos de formulario multiparte, sino más bien una entidad de cadena única – 2bard

0
curl --request POST \ 
    --url http://host/api/content/ \ 
    --header 'authorization: Basic Esdfkjhsdft4934hdfksjdf' 
Cuestiones relacionadas