EDITAR: estoy manteniendo una respuesta similar, pero más en profundidad: https://stackoverflow.com/a/28380690/895245
Para ver exactamente lo que está sucediendo, utilice nc -l
y un agente de usuario como un navegador o rizo.
Guarde el formulario a un archivo .html
:
<form action="http://localhost:8000" method="post" enctype="multipart/form-data">
<p><input type="text" name="text" value="text default">
<p><input type="file" name="file1">
<p><input type="file" name="file2">
<p><button type="submit">Submit</button>
</form>
crear archivos a subir
echo 'Content of a.txt.' > a.txt
echo '<!DOCTYPE html><title>Content of a.html.</title>' > a.html
Run:
nc -l localhost 8000
Abra el HTML en el navegador, seleccione los archivos y haga clic en enviar y verifique la terminal.
nc
imprime la solicitud recibida. Firefox envió:
POST/HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: __atuvc=34%7C7; permanent=0; _gitlab_session=226ad8a0be43681acf38c2fab9497240; __profilin=p%3Dt; request_method=GET
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------9051914041544843365972754266
Content-Length: 554
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="text"
text default
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="file1"; filename="a.txt"
Content-Type: text/plain
Content of a.txt.
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html
<!DOCTYPE html><title>Content of a.html.</title>
-----------------------------9051914041544843365972754266--
Aternativelly, rizo debe enviar la misma petición POST como su forma navegador:
nc -l localhost 8000
curl -F "text=default" -F "[email protected]" -F "[email protected]" localhost:8000
Usted puede hacer varias pruebas con:
while true; do printf '' | nc -l localhost 8000; done
sólo para evitar cualquier confusión : observe que antes de cada cadena de límite en el contenido hay dos guiones adicionales:. Para la última línea es - - –
¿Alguna buena idea sobre cómo crear un archivo de varias partes como este con un bucle for? Mi problema radica en ese extra "-" antes de la \ r \ n final. Si fuera solo al final, podría adjuntarlo ... ¿Haría uno un control si estuviera en el último objeto de su matriz for-loop y añadiera algo diferente? – turkeyhundt
@turkeyhundt: dos opciones vienen inmediatamente a la mente: 1) escriba su bucle como (imprimir límite, imprimir cosas), y luego de completar el bucle for siga con (imprimir límite con guiones adicionales). Esa es probablemente la forma más fácil. 2) escriba su bucle for() para ejecutar cualquier variable de índice que tenga hasta 0, en lugar de hasta 0. Luego, agregue dos guiones adicionales cuando imprima el límite al final si la variable de índice es 0. –