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

简介: 早就有想写一个Java Socket编程系列的文章,由于自己懒一直没动。决定从 今天开始,每周写一篇,从最简单的socket连接,到文件传输到协议实现,到 远程桌面控制,全面讲述Java socket编程的各个方面与各种技巧,从普通 socket到Java NIO。

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

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

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

socket到Java NIO。


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

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

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


从中我们可以知道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)

目录
相关文章
|
12月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
882 1
|
12月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
1301 0
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
1211 64
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
713 1
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
1290 0
|
11月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
719 4
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
438 104