2012-08-06 31 views
45

Mi problema: Usar la herramienta de línea de comandos para curl mi servidor localhost mientras envío algunos datos junto con mi solicitud POST no está funcionando.cURL POST línea de comando en WINDOWS servicio RESTful

Lo que parece ser la causa del error: imaginar algo como esto

  1. curl -i -X POST -H 'Content-Type: application/json' -d '{"data1": "data goes here", "data2": "data2 goes here"}' http:localhost/path/to/api

resultado de los datos que regresan

curl: (6) Could not resolve host: application; No data record of requested type 
curl: (6) Could not resolve host: data goes here,; No data record of requested type 
curl: (6) Could not resolve host: data2; No data record of requested type 
curl: (3) [globbing] unmatched close brace/bracket at pos 16 

Después de buscar información me di cuenta ese problema no podría ser el sintax utilizado para t lo solicita ya que funciona en shells de UNIX.

Are you possibly using Windows? That so looks like a completely broken shell that doesn't properly deal with single-quotes vs double-quotes. I just tried that command line and it worked fine on my linux box. http://curl.haxx.se/mail/archive-2011-03/0066.html

Me trataron de evitar con los "escapar de ella \", pero aún no funcionaba

2.

curl -i -X POST -H 'Content-Type: application/json' -d '{\"data1\": \"data goes here\", \"data2\": \"data2 goes here\"}' http: //localhost/path/to/api

3.

curl -i -X POST -H 'Content-Type: application/json' -d '{\"data1\": \"data goes here\", \"data2\": \"data2 goes here\"}' http: //localhost/path/to/api

Así i Renunció. Windows parece a echar a perder con el objeto JSON enviado en la POST

+0

No agregue '[resuelto]' al título de su pregunta. Si ha encontrado la respuesta a su pregunta, debe publicarla como respuesta. –

+1

Gracias por la advertencia @CodyGray. Corregiré mi publicación. – Lothre1

+1

Si tienes instalado git en tu máquina, puedes usar git bash para curl. Ahorra muchos dolores de cabeza. –

Respuesta

83

me encontré con el mismo problema en mi ordenador portátil win7 x64 y era capaz de conseguir que funcione con la versión rizo que se etiqueta Win64 - Generic w SSL utilizando el formato de línea de comandos muy similar:

C:\Projects\curl-7.23.1-win64-ssl-sspi>curl -H "Content-Type: application/json" -X POST http://localhost/someapi -d "{\"Name\":\"Test Value\"}" 

la que sólo se diferencia de su segunda versión de escape usando comillas dobles alrededor de las escapadas y el valor del parámetro del encabezado. Definitivamente prefiero la sintaxis del linux shell más.

13

solución alternativa: Una solución más Userfriendly de línea de comandos:

If you are looking for a user friendly way to send and request data using HTTP Methods other than simple GET's probably you are looking for a chrome extention just like this one http://goo.gl/rVW22f called AVANCED REST CLIENT

Para los individuos que buscan quedarse con la línea de comandos que recomiendo cygwin :

I ended up installing cygwin with CURL which allow us to Get that Linux feeling - on Windows!

Using Cygwin command line this issues have stopped and most important, the request syntax used on 1. worked fine.

enlaces útiles:

Where i was downloading the curl for windows command line?

For more information on how to install and get curl working with cygwin just go here

Espero que ayude a alguien porque he pasado toda la mañana en esto.

+0

Esta no debería ser la respuesta aceptada. El OP no solicitó recomendaciones para un cliente REST basado en web o un cliente de línea de comando alternativo. Pidieron ayuda para obtener el escapado correcto para curl, que fue respondido por el usuario1683523. –

+0

Pero es una mejor respuesta para muchas personas que hacen esa pregunta. – RickAndMSFT

35

Otra alternativa para la línea de comandos que es más fácil que luchar con comillas es poner el json en un archivo y usar el prefijo @ de los parámetros de curvatura, p. con lo siguiente en json.txt:

{ "syncheader" : { 
    "servertimesync" : "20131126121749", 
    "deviceid" : "testDevice" 
    } 
} 

continuación, en mi caso emitir:

curl localhost:9000/sync -H "Content-type:application/json" -X POST -d @json.txt 

Mantiene el JSON más fácil de leer también.

+0

¡Eres un salvavidas! –

+0

este funcionó, ¡gracias! – kukudas

+0

oh dulce ronald mcdonald gracias –

0
  1. Trate de usar comillas (") en lugar de los simples (').
  2. Para preservar JSON cotizaciones de formato, intente duplicar ellas ("").
  3. Para preservar las cotizaciones dentro de los datos, intente a doble evitarlos así (\\ "").

    curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}" 
    curl ... -d "{""data"": ""data \\""abc\\"" goes here""}" 
    
2

al menos para la versión de Windows binaria probé, (el Generic Win64 no-SSL binary, actualmente basado en 7.33.0) , usted está sujeto a limitaciones en la forma en que se analizan los argumentos de la línea de comando. La respuesta por xmas describe la sintaxis correcta en esa configuración, que también funciona en un archivo por lotes. Usando el ejemplo proporcionado:

curl -i -X POST -H "Content-Type: application/json" -d "{""data1"":""data goes here"",""data2"":""data2 goes here""}" http:localhost/path/to/api 

Una alternativa más limpia para evitar tener que lidiar con caracteres de escape, que depende de lo que sea la biblioteca se utiliza para analizar la línea de comandos, es tener el texto estándar de formato JSON en un archivo separado :

curl -i -X POST -H "Content-Type: application/json" -d "@body.json" http:localhost/path/to/api 
+1

Gracias. No solía ser importante, pero ahora, ya sea con Windows 10 o con mi versión de curl instalada, ahora tengo que poner comillas alrededor de mi argumento de archivo json después de -d o las terminaciones de línea lo estropearán. – joezen777

Cuestiones relacionadas