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)
相关文章
|
2月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
84 19
|
2月前
|
数据采集 Web App开发 API
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。
153 15
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
|
1月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
2月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
125 7
|
3月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
148 9
|
4月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
142 7
Spring Boot 入门:简化 Java Web 开发的强大工具
|
5月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
135 7
|
5月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
148 4
|
5月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
131 0
|
6月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
88 1

热门文章

最新文章

下一篇
oss创建bucket