Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Peticion HTTP a web

Estas en el tema de Peticion HTTP a web en el foro de Java en Foros del Web. Hola, Estoy intentando realizar una conexión con una web usando el protocolo HTTP y sockets, pero el servidor me devuelve un error 400 Bad Request ...
  #1 (permalink)  
Antiguo 21/07/2016, 19:03
Avatar de Once  
Fecha de Ingreso: enero-2016
Mensajes: 8
Antigüedad: 8 años, 3 meses
Puntos: 0
Peticion HTTP a web

Hola,

Estoy intentando realizar una conexión con una web usando el protocolo HTTP y sockets, pero el servidor me devuelve un error 400 Bad Request y no sé qué estoy haciendo mal.

Código Java:
Ver original
  1. import java.io.DataOutputStream;
  2. import java.io.DataInputStream;
  3. import java.io.IOException;
  4. import java.net.Socket;
  5. import java.net.UnknownHostException;
  6.  
  7. public class Enviar {
  8.     private String host;
  9.     private int port;
  10.     private String peticion;
  11.     private Socket web;
  12.     private DataInputStream entrada;
  13.     private DataOutputStream salida;
  14.    
  15.     public Enviar(String host, int port, String peticion) {
  16.         this.host = host;
  17.         this.port = port;
  18.         this.peticion = peticion;
  19.     }
  20.    
  21.     public String enviar() {
  22.         String data;
  23.         String buffer = "";
  24.         try {
  25.         web = new Socket(host, port);
  26.         entrada = new DataInputStream(web.getInputStream());
  27.         salida = new DataOutputStream(web.getOutputStream());
  28.        
  29.         System.out.println("enviando: " + peticion);
  30.        
  31.         salida.writeChars(peticion);
  32.         salida.flush();
  33.         do {
  34.             data = entrada.readLine();
  35.             buffer += data + "\n";
  36.         } while(!buffer.endsWith("\n\n"));
  37.         System.out.println("Recibido del servidor: " + buffer);
  38.         return buffer;
  39.        
  40.        
  41.         } catch (UnknownHostException e) {
  42.             System.err.println("No se encontro el host");
  43.             e.printStackTrace();
  44.         } catch (IOException e) {
  45.             System.err.println("Error entrada salida");
  46.             e.printStackTrace();
  47.         }
  48.         return "";
  49.     }
  50. }

El constructor de la clase recibe como parametros el host, el puerto y un string con la petición completa que quiero realizar, sé que está bien la petición porque estoy probando con una peticion capturada con HTTPLiveHeaders justo para evitar este tipo de errores.

Estoy aprendiendo Java y agradecería cualquier ayuda.

Saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 22/07/2016, 07:10
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Peticion HTTP a web

Buenas,

Si quieres comunicarte por HTTP tienes que utilizar el protocolo HTTP http://www.tutorialspoint.com/http/
Y no enviar cualquier cosa por el socket.

Tambien puedes, en lugar de utilizar sockets directamente, usar las librerias HttpConnection que proporciona el JDK de Java y que encapsula el protocolo de forma transparente.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 22/07/2016, 09:24
Avatar de Once  
Fecha de Ingreso: enero-2016
Mensajes: 8
Antigüedad: 8 años, 3 meses
Puntos: 0
Respuesta: Peticion HTTP a web

Estoy usando el protocolo HTTP correctamente, para asegurarme capturé una petición con HTTPLiveHeaders y le agregué los saltos de línea. No conocía las librerías, gracias.

Solucioné el problema modificando la línea 31 del código por:
Código Java:
Ver original
  1. salida.write(peticion.getBytes());

Saludos!

Etiquetas: http, peticion, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:54.