Java Socket编程 - 获取WEB站点主页信息

简介: Java Socket编程 - 获取WEB站点主页信息

早就有想写一个Java Socket编程系列的文章,由于自己懒一直没动。决定从


今天开始,每周写一篇,从最简单的socket连接,到文件传输到协议实现,到


远程桌面控制,全面讲述Java socket编程的各个方面与各种技巧,从普通


socket到Java NIO。




本文算是第一篇,简述如何通过Java Socket获取网站的主页内容其中包括


如何获取本地机器名与IP地址,如何建立一个socket连接到远程WEB站点


如何使用HTTP GET方法获取网站主页内容与HTTP响应头。程序运行结果:


1351696543_2243.png



从中我们可以知道csdn网站是基于什么语言开发,服务器是什么,版本是多少。


具体的做法请看源代码:

package com.gloomyfish.socket.tutorial.one;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
 
public class HomePageVisitor {
  private Socket client;
  private SocketAddress address;
  public HomePageVisitor(String hostName, int port) throws UnknownHostException, IOException {
    client = new Socket();
    address = new InetSocketAddress(hostName, port);
  }
  // GET http://localhost:8080/blank/Welcome.do HTTP/1.1\r\n
  public void printHomePageInfo(String httpString)
  {
    try {
      // Get local host info
          InetAddress inetAddress = InetAddress.getLocalHost();
          System.out.println("Host Address = " + inetAddress.getHostAddress());
          System.out.println("Hostname = " + inetAddress.getHostName());
          
          // visit the WEBSITE
      client.connect(address);
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(), "UTF8"));
      bufferedWriter.write(httpString);
      
      // -- HTTP/1.1 400 Bad Request if not send \r\n
      bufferedWriter.write("\r\n");
      bufferedWriter.flush();
      System.out.println("http request send out");
      
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
      String content = null;
      while((content = bufferedReader.readLine()) != null) {
        if(getStatusCde(content) == 400) {
          System.err.println("HTTP/1.1 | HTTP/1.0 400 Bad Request");
          break;
        }
        System.out.println("response contect -->> " + content);
      }
    } catch(Exception e) {
      e.printStackTrace();
    }
    
  }
  
  /**
   * <p> try to parse the HTTP response content</p>
   * @param content
   * @return status of HTTP
   */
  private static int getStatusCde(String content) {
    int status = 200; // default OK response
    if(content == null || "".equals(content))
      return status;
    else if (!content.contains("HTTP/1.1")&& !content.contains("HTTP/1.0"))
      return status;
    else if(content.contains("400") && content.contains("HTTP/1.1")
        || content.contains("HTTP/1.0")) {
      status = 400;
    }
    return status;
  }
  
  public static void main(String[] args) {
    try {
      HomePageVisitor httpVisitor = new HomePageVisitor("www.csdn.net", 80);
      httpVisitor.printHomePageInfo("GET http://www.csdn.net HTTP/1.0\r\n");
    } catch (UnknownHostException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

如果使用了代理,在初始化Address时候使用HTTP代理的地址与端口

接口,其它不变,代理会自动转发HTTP GET请求。代码如下:

address = new InetSocketAddress(http_proxy, proxy_port)
相关文章
|
6月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
642 1
|
6月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
754 0
|
7月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
804 64
|
7月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
515 1
|
8月前
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
863 0
|
缓存 监控 Java
Java Socket编程最佳实践:优化客户端-服务器通信性能
【6月更文挑战第21天】Java Socket编程优化涉及识别性能瓶颈,如网络延迟和CPU计算。使用非阻塞I/O(NIO)和多路复用技术提升并发处理能力,减少线程上下文切换。缓存利用可减少I/O操作,异步I/O(AIO)进一步提高效率。持续监控系统性能是关键。通过实践这些策略,开发者能构建高效稳定的通信系统。
592 1
|
Java 应用服务中间件 开发者
【实战指南】Java Socket编程:构建高效的客户端-服务器通信
【6月更文挑战第21天】Java Socket编程用于构建客户端-服务器通信。`Socket`和`ServerSocket`类分别处理两端的连接。实战案例展示了一个简单的聊天应用,服务器监听端口,接收客户端连接,并使用多线程处理每个客户端消息。客户端连接服务器,发送并接收消息。了解这些基础,加上错误处理和优化,能帮你开始构建高效网络应用。
832 10
|
IDE Java 开发工具
从零开始学Java Socket编程:客户端与服务器通信实战
【6月更文挑战第21天】Java Socket编程教程带你从零开始构建简单的客户端-服务器通信。安装JDK后,在命令行分别运行`SimpleServer`和`SimpleClient`。服务器监听端口,接收并回显客户端消息;客户端连接服务器,发送“Hello, Server!”并显示服务器响应。这是网络通信基础,为更复杂的网络应用打下基础。开始你的Socket编程之旅吧!
327 3
|
Java 数据挖掘 开发者
Java网络编程进阶:Socket通信的高级特性与应用
【6月更文挑战第21天】Java Socket通信是分布式应用的基础,涉及高级特性如多路复用(Selector)和零拷贝,提升效率与响应速度。结合NIO和AIO,适用于高并发场景如游戏服务器和实时数据分析。示例展示了基于NIO的多路复用服务器实现。随着技术发展,WebSockets、HTTP/2、QUIC等新协议正变革网络通信,掌握Socket高级特性为应对未来挑战准备。
232 1
|
网络协议 安全 Java
Java网络编程入门涉及TCP/IP协议理解与Socket通信。
【6月更文挑战第21天】Java网络编程入门涉及TCP/IP协议理解与Socket通信。TCP/IP协议包括应用层、传输层、网络层和数据链路层。使用Java的`ServerSocket`和`Socket`类,服务器监听端口,接受客户端连接,而客户端连接指定服务器并交换数据。基础示例展示如何创建服务器和发送消息。进阶可涉及多线程、NIO和安全传输。学习这些基础知识能助你构建网络应用。
193 1