Quando invio una normale richiesta HTTP tramite un socket, il server non risponde con una risposta OK. Ho copiato l'intestazione HTTP da FireFox. Ecco il codice:Invia richiesta HTTP manualmente tramite 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();
Tuttavia, qui è la risposta che ho ricevuto:
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>
So che posso fare questo usando URL.openStream()
, ma perché il server non identifica la richiesta HTTP quando lo invio manualmente?
Credo che bisogna inviare un ritorno a capo aggiuntivo dopo tutte le intestazioni; 'pw.println();', e usa 'println()' anche per le intestazioni? – Torious
@Torious Sì, questo è il problema. Grazie :) –
E le nuove righe devono essere di tipo \ r \ n per HTTP. – EJP