Java构造http请求报文

标签 java http sockets

我在另一个线程中问了一个类似的问题,但我认为此时我在正确获取语法方面遇到了麻烦。我基本上想在 Java 中打开一个套接字,发送一个 HTTP 请求消息以获取特定网页的 header 字段。到目前为止,我的程序看起来像这样:

            String server = "www.w3.org"; 
            int port = 80; 
            String uri = "/Protocols/rfc2616/rfc2616-sec5.html#sec5.1"

            Socket socket = new Socket(server, port); 

            PrintStream output = new PrintStream(socket.getOutputStream()); 
            BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            output.println("HEAD " + uri + " HTTP/1.1");

            //String response = ""; 
            String line = ""; 
            while((line = socketInput.readLine()) != null){
                System.out.println(line);  
            }

            socketInput.close();
            socket.close();

这根本行不通。或者它不适用于所有网站。如果有人能告诉我我正在做的事情的直接问题,那就太好了。谢谢你!

最佳答案

改变

output.println("HEAD " + uri + " HTTP/1.1");

output.println("HEAD " + uri + " HTTP/1.1");
output.println("Host: " + server);
output.println();

您必须发送Host header ,因为一个IP 地址通常有多个虚拟主机。如果您使用 HTTP/1.0,它可以在没有 Host header 的情况下工作。

关于Java构造http请求报文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7615323/

相关文章:

java - 如何更改合成器/音序器的 'master' 音量?

php - 尝试使用 php ( HTTP POST ) 从 iOS 连接到 MySQL 数据库

http - 为什么 foo.example.com 可以为 example.com 设置 cookie?

java - Struts2属性标签默认转义属性

java - 小数格式设置零位

java - 如何像 Java 文档一样用 Java 记录我的方法?

PHP - 使用 HTTP_REFERER 测试 iframe 的父页面是否可靠?

Java RMI 连接池详细信息

java - 为什么我的客户端-服务器应用程序重复预期输出?

Python socket.gethostbyname 函数返回一个 ip 地址,但我无法 ping 它