java - 使用 java 套接字类获取网页

标签 java networking client-server

大家晚上好
我想使用 java 中的套接字类获取网页,我已经这样做了

import java.net.*;
import java.io.*;

class htmlPageFetch{
        public static void main(String[] args){
                try{
                        Socket s = new Socket("127.0.0.1", 80);
                        DataInputStream dIn = new DataInputStream(s.getInputStream());
                        DataOutputStream dOut = new DataOutputStream(s.getOutputStream());
                        dOut.write("GET /index.php HTTP/1.0\n\n".getBytes());
                        boolean more_data = true;
                        String str;
                        while(more_data){
                                str = dIn.readLine();
if(str==null)
more_data = false;
                                System.out.println(str);
                        }
                }catch(IOException e){

                }
        }
}

但它只是给出空值。

输出

 HTTP/1.1 302 Found
Date: Wed, 01 Dec 2010 13:49:02 GMT
Server: Apache/2.2.11 (Unix) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.2.9 mod_apreq2-20051231/2.6.0 mod_perl/2.0.4 Perl/v5.10.0
X-Powered-By: PHP/5.2.9
Location: http://localhost/xampp/
Content-Length: 0
Content-Type: text/html

null

最佳答案

我不确定这是否会导致您的问题,但 HTTP 需要换行符的回车符和换行符:

dOut.write("GET /index.php HTTP/1.0\r\n\r\n".getBytes());

此外,刷新和关闭您的 DataOutputStream 也没有什么坏处:

dOut.flush();
dOut.close();

如果您打算使用这段代码做更多的事情,而不仅仅是连接到简单的测试用例,我建议为此使用 HttpURLConnection 而不是自己在套接字中实现 HTTP。否则,结果将不仅仅包含网页。它还将包含 HTTP 响应,包括状态代码和 header 。您的代码需要对其进行解析。

更新:

查看您添加的响应,该 302 响应连同 Location: header 表明您要查找的页面已移至 http://localhost/xampp/ (参见 HTTP 302 )并且原始 URL 不再有任何内容。这是可以设置为由 HttpURLConnection 或其他库(如 Apache HttpClient)自动处理的内容。 .您将需要解析状态代码、解析 header 、打开一个新套接字到响应位置并获取页面。根据您任务的具体要求,您可能希望自己熟悉 HTTP 1.0 Specification , 和 HTTP 1.1 Specification

关于java - 使用 java 套接字类获取网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4324878/

相关文章:

代理相关代码的Java集成测试

ios - iOS 上的 ICMP 与 TCP 协议(protocol)

scala - Akka 和游戏服务器架构

php - Android:如何在客户端和服务器之间同步数据库条目

java - 如何在 java 上使用 mysqldump?

java - Spring JPA 和 Streaming - 数据是否增量获取?

java - 操作 javac -d : invalid flag? 时出错 如果我更正它,则会出现另一个 package-not-found 错误

java - 识别网络接口(interface)的种类

c# - Unity Networking中如何知道客户端和服务器是否已连接

java - 替换android中文件的第一行