El caso es que estoy haciendo un miniservidor HTTP con java, Conecto el cliente(Browser) mediante sockets con el servidor. La cuestión es que tengo un formulario en el cliente y no se como obtener los datos para poder tratarlos en el servidor. Si que consigo los datos como por ejemplo Content-Type: application/x-www-form-urlencoded ,Content-Length: 21,
pero no obtengo los datos introducidos en el input¿Alguna idea? Tiene que resolverse mediante sockets.
entre Desarrolladores
Recibe ayuda de expertos
Registrate y pregunta
Es gratis y fácil
Recibe respuestas
Respuestas, votos y comentarios
Vota y selecciona respuestas
Recibe puntos, vota y da la solución
Pregunta
¿Cómo obtener la informarción de los inputs de un formulario web, mediante sockets de java?
- preguntó
- Web
- 651 Vistas
- 3 Respuestas
- solucionada
3 Respuestas
Muchas gracias por las respuestas, al final lo logré. Era un problema de lectura de los datos del POST, con esto se soluciona:
if(getSplit[0].equals("POST"))
{
j = 0;
while (j<7) {
line = datos.readLine() ;
if(line != null)
{
if(line.contains("Content-Length"))
{
p=split(line," ");
tam = Integer.parseInt(p[1]);
}
}
j++;
}
final char[] usuario = new char[tam];
datos.read(usuario);
Por favor, accede o regístrate para añadir un comentario.
Los sockets son conexiones que el servidor matienen con el cliente para poder enviarle datos, al revés de lo que hace el protocolo HTTP.
Vía socket, podés enviarle al cliente una mensaje del tipo "devolveme los datos", pero tendrías que tener un JavaScript en el cliente que esté esperando el pedido y te lo responda.
No pierdas de vista el mecanismo de comunicación de los sockets, respecto de quien envío y quién recibe peticiones...
Saludos!
Por favor, accede o regístrate para añadir un comentario.
Te llegan el cuerpo de la peticion almenos?
aca te dejo un ejemplo:
try
{
ServerSocket serverSocket = new ServerSocket(8001);
while (true)
{
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
String line = in.readLine();
boolean submit = line.startsWith("POST");
if(submit)
{
System.out.println("get form data:");
System.out.println();
int contentLength = 0;
while(!(line = in.readLine()).equals(""))
{
if(line.startsWith("Content-Length:"))
{
contentLength = Integer.parseInt(line.substring("Content-Length: ".length()));
}
}
StringBuilder requestBody = new StringBuilder();
String[] params;
HashMap<String, String> $_POST = new HashMap();
if (submit) {
for (int i = 0; i < contentLength; i++) {
requestBody.append((char) in.read());
}
params = requestBody.toString().split("&");
for(int i = 0; i < params.length; i++) {
String[] param = params[i].split("=");
$_POST.put(param[0], param[1]);
}
for(Entry<String, String> input : $_POST.entrySet())
{
System.out.printf("$_POST[%s] = '%s'\n", input.getKey(), input.getValue());
}
}
}
String htmlForm = "<html>"
+ "<head>"
+ " <title>Entredesarrolladores form example</title>"
+ "</head>"
+ " <body>"
+ " <form method='POST'>"
+ " <input type='text' name='test' value='anything'><input type='submit'>"
+ " </form>"
+ " </body>"
+ "</html>";
out.write("HTTP/1.0 200 OK\r\n");
out.write("Server: Java server\r\n");
out.write("Content-Type: text/html\r\n");
out.write("Content-Length: " + htmlForm.length() + "\r\n");
out.write("\r\n");
out.write(htmlForm);
out.flush();
out.close();
clientSocket.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
si la primera linea de la peticion es POST
entonces tomaremos el cuerpo del mensaje que tendra algo asi:
POST ...
Host: localhost:8001
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.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
Referer: http://localhost:8001/
Connection: keep-alive
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
test=anything&other=other%20value
entonces, divide el cuerpo del mensaje por cada caracter &
y a ese arreglo recorrelo y obten el nombre del campo y el valor.
el resultado en consola seria:
$_POST[test] = 'anything'
Por favor, accede o regístrate para añadir un comentario.
Por favor, accede o regístrate para responder a esta pregunta.
En el blog
-
- 691116
- 1
- Jul 5, 2015
Sin Respuesta
-
- 178
- 0
- Oct 18
-
- 187
- 0
- Jul 9
-
- 587
- 1
- Mar 19
-
- 462
- 2
- Feb 26
-
- 5067
- 0
- Nov 7, 2023
-
- 494
- 0
- Sep 19, 2023
-
- 502
- 0
- Ago 21, 2023
-
- 658
- 0
- May 14, 2023
- ver todas
Actividad Reciente
mchojrin respondió Dic 9
Ayuda , necesito mostrar datos creados solo por el…alyvrs preguntó Oct 19
Ayuda , necesito mostrar datos creados solo por el…ManHol preguntó Jul 9
pasar un archivo de excel a csv en pythonArtEze respondió Abr 24
Alguien sabe, no me ignorenArtEze seleccionó una respuesta Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze preguntó Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió Abr 24
No me deja instalar OracleArtEze respondió Abr 24
Formulario que guarde los datos de un jsonArtEze comentó Abr 24
Script /boot/ scraping
Ultimas Preguntas
Usuarios Top
- Leonardo-Tadei
- 227320 Puntos
- Peter
- 150480 Puntos
- white
- 75880 Puntos
- carlossevi
- 63580 Puntos
- magarzon
- 30650 Puntos
- pregunton
- 20400 Puntos