Skip to content

Instantly share code, notes, and snippets.

@fixmycode
Last active August 29, 2015 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fixmycode/11130879 to your computer and use it in GitHub Desktop.
Save fixmycode/11130879 to your computer and use it in GitHub Desktop.
HTTP
private void processRequest() throws Exception {
InputStream is = socket.getInputStream(); //obtiene la entrada del socket
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); //se crea un nuevo stream donde almacenar la entrada
int ch; //un caracter de lectura
while((ch = is.read()) != -1) { //mientras que el caracter leído desde el stream sea distinto de -1, cosa que no debería pasar nunca (es igual a que si le hubiese puesto while(true), pero necesitamos que en cada ciclo lea un caracter.
outputStream.write(ch); //se escribe ese caracter en el nuevo stream
if (ch == '\n') { //si el caracter leído es un salto de linea...
ch = is.read(); //lee otro caracter más
if (ch == '\n' || ch == '\r') //y si ese caracter adicional también es un salto de linea...
break; //sal del ciclo
outputStream.write(ch); //de otra forma escríbelo en el nuevo stream
}
}
//Esta string tiene todos los cabezales para que los leas por parte
String headerRequest = new String(outputStream.toByteArray(), "UTF-8"); //se convierte el nuevo stream en una string legible
//Si quieres verla puedes imprimirla
System.out.println(headerRequest);
//Aquí usas toxenizers, expresiones regulares o lo que sea para separar las partes de los cabezales
//usa la imaginación
//Imaginemos que extrajiste el método de la llamada a una variable llamada "method"
if (method.equals("POST")) { //si el método es POST. Recuerda, solo si es POST la solicitud va a tener más contenido.
outputStream = new ByteArrayOutputStream(); //reinicializa esta variable con un nuevo stream
ch = is.read(); //lee un caracter, que debería ser una linea vacía \n o un retorno de carro \r, no nos importa
while((ch = is.read()) != -1) { //mientras que se leen los datos, igual como el while anterior...
outputStream.write(ch); //...escribelos en el nuevo stream
if (ch == '\n' || ch == '\r' || ch == '}'){ //si encuentras cualquier caracter que pueda ser el final de una linea
break; //entonces sal del bucle
}
}
//En esta string queda el contenido del formulario :)
String payload = new String(outputStream.toByteArray(), "UTF-8");
//puedes imprimirla si quieres:
System.out.println(payload);
}
//sigues procesando tu solicitud
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment