`
name327
  • 浏览: 165122 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java使用socket实现http简单get请求

阅读更多
package com.hs;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class SimpleHttpGet {
	public static final String SEQUENCE = "\r\n";

	public static void main(String[] args) throws UnknownHostException,
			IOException {
		String host = "www.baidu.com";
		Socket socket = new Socket(host, 80);
		OutputStream os = socket.getOutputStream();
		StringBuffer head = new StringBuffer();
		// 这些是必须的
		head.append("GET / HTTP/1.1" + SEQUENCE);
		head.append("Host:" + host + SEQUENCE + SEQUENCE);
		// 这些是可选的
		head.append("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		head.append("Accept-Language:zh-CN,zh;q=0.8");
		head.append("User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
		os.write(head.toString().getBytes());
		os.flush();
		InputStream is = socket.getInputStream();
		LineNumberReader lnr = new LineNumberReader(new InputStreamReader(is));
		StringBuffer headRes = new StringBuffer();
		String line = null;
		int contentLength = 0;
		do {
			line = lnr.readLine();
			headRes.append(line + SEQUENCE);
			if (line.startsWith("Content-Length")) {
				contentLength = Integer.parseInt(line.split(":")[1].trim());
			}
		// 由于LineNumberReader会把\r\n替换掉,所以如果读到一行为""证明http head结束
		} while (!line.equals(""));
		
		int totalCount = 0;
		byte[] buff = new byte[256];
		StringBuffer contentRes = new StringBuffer();
		while (totalCount < contentLength) {
			int len = is.read(buff);
			totalCount += len;
			contentRes.append(new String(buff, 0, len, "gbk"));
		}
		System.out.println(headRes.toString());
		System.out.println(contentRes.toString());
		socket.close();
	}
}
 

只实现了get请求,而且如果http head中没有 content-length也会有问题, 比如有的网站头中有

Transfer-Encoding:
chunked ,这样就会没有content-length信息, 这个我也没解决, 如果谁有兴趣可以以深入了解下http协议头中的
Transfer-Encoding:
chunked代表什么意思。
0
1
分享到:
评论

相关推荐

    JAVA Socket编程实现文件上传

    在这个场景中,我们讨论的是如何使用Java的Socket来实现文件上传功能,即从客户端将文件发送到服务器,然后保存到服务器的数据库中。这个过程涉及到多个关键知识点,下面我们将详细探讨。 1. **Java Socket基础**:...

    利用java socket实现发送http请求

    基于java socket发送http请求。这种原生的发送请求的方式能适合一些特定场景,比如: A向B发送请求,A不考虑B是否处理成功,即A不关注B的响应结果,那么A就不用阻塞等B的回应。 传统的Httpclient请求方式都是阻塞...

    JAVA使用Socket编写HTTP服务器

    在Java编程语言中,使用Socket实现一个简单的HTTP服务器是一项基础但重要的技能。HTTP服务器是互联网上用于接收HTTP请求并返回响应的程序。本教程将详细解释如何通过Socket类来构建这样的服务器,同时会涉及到相关的...

    Java Socket实现简单的web服务器

    3. **HTTP GET 请求**: GET请求是最基础的HTTP请求类型,其格式为 `GET /resource HTTP/1.1`,其中 `/resource` 是要请求的资源路径。服务器收到GET请求后,应返回指定资源的内容。 4. **文件I/O操作**: 服务器需要...

    Java实现Socket长连接和短连接

    综上所述,Java实现Socket长连接和短连接涉及网络通信基础、连接管理、异常处理等多个方面,开发者需要根据实际需求权衡选择合适的方式。通过深入理解这些概念和技术,可以有效地优化网络服务,提升应用的性能和用户...

    java socket 发送http请求webservice.

    下面是一段简单的Java代码示例,演示如何使用Socket发送GET类型的HTTP请求: ```java import java.io.*; import java.net.Socket; public class HttpClient { public static void main(String[] args) throws ...

    Java Socket编程实现的简单多线程WEB服务器

    在本文中,我们将详细介绍如何使用 Java 的 Socket 编程实现一个简单的多线程 WEB 服务器。 Socket 编程简介 Socket 编程是 Java 网络编程的基础,它允许开发者创建客户端和服务器端的网络应用程序。Socket 是一种...

    原生Socket 实现HTTP、HTTPS通信

    例如,在`ExampleUnitTest.java`中可能包含了一个测试HTTP请求的单元测试用例,它通过创建Socket连接到指定的HTTP服务器,发送HTTP请求报文,并接收服务器的响应。 HTTP请求报文通常包括请求行(方法、URL、协议...

    Java_Socket现实简单的HTTP服务

    本文将深入解析如何使用Java的Socket编程技术实现一个简易的HTTP服务器。这不仅涵盖了基础的请求与响应流程,还涉及了状态码的处理、不同类型的响应内容(如HTML文本和图片文件),以及如何通过代码实现这些功能。 ...

    socket 实现http下载

    在IT领域,网络编程是不可或缺的一部分,而Socket编程则是实现客户端与服务器通信的基础。本话题主要探讨如何使用Socket实现HTTP下载,这对于理解HTTP协议的工作原理和深入学习网络编程至关重要。 HTTP(超文本传输...

    Java中用Socket实现HTTP文件上传实例

    在Java编程中,使用Socket实现HTTP文件上传是一种基础的网络通信方式,尤其在自定义简单Web服务器或者理解HTTP协议时非常有用。本篇文章将详细介绍如何通过Java Socket来实现这个功能。 首先,了解HTTP POST的附件...

    基于Java实现的socket即时通信系统

    在IT领域,网络通信是不可或缺的一部分,而Java作为一种强大的编程语言,提供了丰富的API来支持网络编程,特别是通过Socket实现客户端/服务器(C/S)架构的即时通信系统。本项目"基于Java实现的socket即时通信系统...

    MTK平台用Socket实现HTTP请求总结

    在MTK(MediaTek)平台上,使用Socket实现HTTP请求是一项常见的任务,特别是在开发嵌入式设备或物联网应用时。本文将深入探讨如何在MTK平台上通过Socket编程来发送HTTP请求,涉及的知识点包括Socket基本原理、HTTP...

    java 实现HTTP PROXY

    Java实现HTTP PROXY是一个常见的需求,特别是在开发网络应用或者测试环境中,我们可能需要通过代理服务器转发HTTP请求。本文将深入探讨如何使用Java编程语言来创建一个HTTP代理服务器,并且会涉及相关的源码分析。 ...

    Java基于Socket实现文件传输示例

    在这个示例中,我们将探讨如何使用Java的Socket API来实现在服务器和客户端之间传输文件。文件传输是一个常见的需求,特别是在分布式系统或者网络应用中,理解如何通过Socket实现文件传输对于Java开发者来说至关重要...

    java socket 学习资料

    - 在Java Socket中实现HTTP服务器,需要解析HTTP请求(GET、POST等),并返回适当的HTTP响应。 - GET请求通常用于获取资源,POST请求用于向服务器提交数据。 - 文件上传涉及到处理multipart/form-data格式的POST...

    java多线程Socket简单实现

    在这个Java多线程Socket实现中,我们将探讨如何创建服务器端(ServerSocket)和客户端(Socket),以及如何使用多线程来处理并发连接。 首先,我们需要理解Java中的`Socket`类和`ServerSocket`类。`ServerSocket`是...

    JAVA SOCKET模拟HTTP请求,文件上传!

    采用JAVA的socket实现http协议,模拟浏览器访问服务端。

    java socket for http socket

    javac Server.java java.exe Server 查看说明 可以简单得到http请求头 便于分析http

    Java Socket PC端传输文件简易服务器客户端

    Java Socket编程是网络编程中的重要组成部分,主要用于在两台计算机之间建立双向通信通道,实现数据的交换。在Java中,Socket类和ServerSocket类是进行网络通信的核心工具,它们提供了客户端与服务器之间的连接和...

Global site tag (gtag.js) - Google Analytics