2011-09-26 10 views
8

Si he creado una página html con la siguiente forma:Envío de un archivo a través de POST usando HTTP pura (masilla)

<html> 
<body> 

<form action="upload_file.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 

</body> 
</html> 

puedo cargar un archivo a upload_file.php donde puedo manejarlo utilizando un php guión.

Para propósitos de prueba, necesito hacer lo mismo usando HTTP sin procesar a través de una sesión de Putty.

que pueda hacer un POST normal (sólo el envío de datos de texto) de esta manera:

POST /test_post.php HTTP/1.1 
Host: example.com 
User-Agent: Mozilla/5.0 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 11 

name=myname 

¿Cómo puedo enviar un archivo de este modo?

Respuesta

14

usted tiene que utilizar multipart tipo de contenido y codificar los datos de archivo en hexadecimal/binario

intente lo siguiente en telnet:

POST /the_url HTTP/1.1 
User-Agent: Mozilla 
Host: www.example.com 
Content-Length: xxxx 
Content-Type: multipart/form-data; boundary=--------------------31063722920652 
------------------------------31063722920652 
Content-Disposition: form-data; name="a" 

value_for_a 
------------------------------31063722920652 
Content-Disposition: form-data; name="b" 

value_for_b 
------------------------------31063722920652 
Content-Disposition: form-data; name="c"; filename="myfile.txt" 
Content-Type: text/plain 

      This is a test 
      and more 

-----------------------------31063722920652 
Content-Disposition: form-data; name="submit" 

Submit 
-----------------------------31063722920652-- 

recordar que un salto de línea extra es necesaria entre el nombre del campo y su datos. Además, actualice el valor Content-Length. un puerto

+0

¿Cómo acomodaría el archivo en la nueva longitud del contenido? ¿Será el tamaño del archivo en bytes? – xbonez

+1

He completado los datos brutos en mi respuesta. Ahora contiene una carga útil de archivos de texto. Content-Length será el tamaño completo de la carga (incluido el archivo) en bytes –

+0

Content-Length es el tamaño en bytes de los datos que se envían comenzando desde el primer "límite" hasta el último. –

4

abierta con netcat y guardar la solicitud entrante:

nc -l -p 1090 > income-http.txt 

a continuación, modificar su forma para enviar los datos al netcat:

<form action="http://localhost:1090/upload_file.php" 
    method="post" enctype="multipart/form-data"> 

envíe el formulario de su navegador. Puede encontrar la solicitud completa sin formato con el contenido del archivo en el archivo income-http.txt.

Guardar income-http.txt es una actividad que se realiza una única vez. Más tarde puede enviar la solicitud guardada en cualquier momento. Tenga en cuenta que debe editar el encabezado Host: en el txt guardado.

+0

Me gusta mucho la idea de poder analizar la solicitud entrante. Pero desafortunadamente, abrir un puerto no es una opción para mí. ¿Hay alguna alternativa a eso? – xbonez

+1

Tienes que hacerlo solo en tu máquina local y solo una vez. Después de obtener el ingreso-http.txt, puede enviarlo en cualquier momento. – palacsint

+0

Oh, ¿quiere decir que abro el puerto en la máquina local y no tengo que reenviarlo al enrutador? No tengo acceso al enrutador Le daré una oportunidad a Netcat. – xbonez

Cuestiones relacionadas