PUBLICAR el contenido de un archivo con CURL


15

(La siguiente es una historia de fondo, puede saltar a "Pregunta:" si lo desea)

Hay una página web para uno de mis cursos que acepta texto de entrada (se espera que sea código Python) y luego da una respuesta simbólica. Está destinado a ser utilizado como referencia para los lexers de Python que estamos escribiendo. Estoy tratando de automatizar mi proceso de prueba y poder verificar mi código sin abrir un navegador, copiar texto de un lado a otro, etc. Entonces, esto es lo que estoy tratando de hacer:

Tengo un archivo de Python de muestra llamado "x.py" y quiero publicarlo en el servidor como si hubiera completado ese formulario. He intentado:

curl --data-urlencode "file=@x.py" http://matt.might.net/apps/pylex/pylex.php

Pero desafortunadamente, eso no funciona bien porque aparentemente "@x.py"se publica como el contenido de mi archivo (es decir, "file=@x.py"lo que se publica, no "file=<contents-of-x.py>"). Lo he intentado --formy --datatampoco han funcionado.

Pregunta: Específicamente, si tengo un archivo con contenido no codificado en URL y el contenido de este archivo debe ser parte de una POST y estar asociado a un nombre en particular (en este caso file), ¿cuál es la forma correcta de lograr esto? ?



¿Por qué no publicar eso como respuesta? Puede responder su propia pregunta, y luego en ~ 2 días o algo (no estoy seguro de cuánto tiempo) puede aceptarla.
BenjiWiebe

@BenjiWiebe: Muy bien, lo publicaré.
Cornstalks

Respuestas:


25

Lo que quieres es "file@x.py"(no =).

Desde la página del curl manual :

nombre @ nombre de archivo Esto hará que los datos de carga de rizo del archivo dado (incluidas las nuevas líneas), codifique con URL esos datos y los pase en la POST. La parte del nombre obtiene un signo igual agregado, lo que resulta en nombre = contenido de archivo urlencoded. Tenga en cuenta que se espera que el nombre ya esté codificado en URL.


2

Dejaré la respuesta de qmega como la aceptada, pero también pondré una respuesta que dejé en un comentario aquí para facilitar la lectura. Otra forma de hacerlo es simplemente especificando "file=`cat x.py`". Para el comando completo, sería:

curl --data-urlencode "file=`cat x.py`" http://matt.might.net/apps/pylex/pylex.php
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.