Khi tôi gửi một yêu cầu HTTP bình thường thông qua một ổ cắm, máy chủ không phản hồi bằng phản hồi OK. Tôi đã sao chép tiêu đề HTTP từ FireFox. Đây là mã:Gửi yêu cầu HTTP theo cách thủ công qua cổng
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();
Tuy nhiên, đây là câu trả lời tôi nhận được:
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>
Tôi biết rằng tôi có thể làm điều này bằng cách sử dụng URL.openStream()
, nhưng tại sao máy chủ không xác định các yêu cầu HTTP khi tôi gửi nó bằng tay?
Tôi nghĩ rằng bạn phải gửi một newline bổ sung sau khi tất cả các tiêu đề của bạn; 'pw.println();', và sử dụng 'println()' cho các tiêu đề là tốt? – Torious
@Torious Yeah, đó là vấn đề. Cảm ơn :) –
Và dòng mới phải có dạng \ r \ n cho HTTP. – EJP