Cuando envío una solicitud HTTP normal a través de un socket, el servidor no responde con una respuesta OK. Copié el encabezado HTTP de FireFox. Aquí está el código:Enviar solicitud HTTP manualmente a través del socket
Socket s = new Socket(InetAddress.getByName("stackoverflow.com"), 80);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.print("GET/HTTP/1.1");
pw.print("Host: stackoverflow.com");
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String t;
while((t = br.readLine()) != null) System.out.println(t);
br.close();
Sin embargo, aquí está la respuesta que recibí:
HTTP/1.0 408 Request Time-out
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>408 Request Time-out</h1>
Your browser didn't send a complete request in time.
</body></html>
Sé que puedo hacer esto mediante el uso de URL.openStream()
, pero ¿por qué el servidor no identifica la petición HTTP cuando lo envío manualmente?
yo creo que hay que enviar un salto de línea adicional después de todas sus cabeceras; 'pw.println();', y use 'println()' para los encabezados también? – Torious
@Torious Sí, ese es el problema. Gracias :) –
Y las líneas nuevas deben ser de la forma \ r \ n para HTTP. – EJP