`

使用JAVA模拟HTTP

阅读更多
通常在服务器与客户机之间,我们使用HTTP协议通过浏览器与服务器之间进行通信,查阅了书籍发现服务器是通过GET命令接受客户机请求的。




反正不管什么,只要服务器与客户机建立一次TCP连接,使用HTTP的GET就可以让服务器传数据给客户机。问题在这,资料上说,HTML中的图片并不是与第一次GET连接一起传过来的。比如:你第一次向服务器GET一下,服务器响应,把HTML页面代码传给你,之后浏览器开始解释这些代码,当浏览器发现传过来的代码中有图片时,它会自己再次向服务器发送GET请求,此时你虽然没有手动发送GET,但实际上已经GET了。这样一来,对WEB服务器必然带来比较多的负载,所以,处理图片传送的最好使用单独的文件服务器。当然,GET传过来的还有一些机器信息等等,这里就不多说了。补充一下,这里的命令一共有三个,一个是GET,一个是POST,一个是HEAD(为测试,实际中无任何作用,只是测试是否有效)。


以下代码简单的模拟了一下请求:

package http.business;

public interface IHttp {
	
}


package http.business;

public interface ISafe {
	
	public void TestHttpCommandSafe(String type,String url,String ip);

}


package http.business;


public interface IControl {
	
	public void commandList(Command command);
	
	public void checkListNull();
}



package http.business;

public class Command {

	private String type;
	private String url;
	private String ip;
	private Command command;
	
	
	public Command getCommandRecord(){
		Command command=new Command();
		command.setIp(this.getIp());
		command.setType(this.getType());
		command.setUrl(this.getUrl());
		return command;
	}
	
	
	public void setCommandRecord(String type,String url,String ip){
		this.type=type;
		this.ip=ip;
		this.url=url;
	}
	
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	
	
	
}




package http.business;

import java.util.ArrayList;
import java.util.List;

public class Control implements IControl {
	
	
	private static List<Command> commandRecord=new ArrayList<Command>();
	
	
	
	public void commandList(Command command){
		
		commandRecord.add(command);

		checkListNull();
		
		
	}
	
	
	 public void checkListNull(){
		
			if(commandRecord.size()>=1){
			for(int i=0;i<commandRecord.size();i++){
				
				
				IHttp http=new Http(commandRecord.get(i).getType(), commandRecord.get(i).getUrl(), commandRecord.get(i).getIp()); 
				

				Command command=new Command();
				command=commandRecord.get(i);
				this.commandRecord.remove(command);
				
				}
			}
			
		}
		
	}






package http.business;



public class Http implements IHttp{

	private String url;
	private String ip;
	
	private String type;
	
	
	private static String flag="YES";
	
	
	private String lineFlag;
	
	
	public static String sFlag="1";
	
	
	
	
	public Http(String type,String b,String c){
		if(flag.equals("YES")) { 
			flag="NO";
			this.url=b;
			this.ip=c;
			this.type=type;
			this.lineFlag="NO";
			sFlag="1";
				if(type.equals("GET")){
						this.Get(this.url,this.ip);
					}else if(type.equals("POST")){
						this.Post(this.url,this.ip);
						}else{
						this.Head(this.url,this.ip);
					}	
			}else{
				
				flag="YES";
				sFlag="1";
				
				IControl control=new Control();
				Command command=new Command();
				
				command.setCommandRecord(type, b, c);
				control.commandList(command.getCommandRecord());
			}
	}
	
	public Http(){
		
	}
	
	
	
	public void http(String type,String b,String c){
		IHttp http=new Http(type,b,c);
		
	}
	
	
	private void Get(String b,String c){
		
		System.out.println("GET....OK!");
		System.out.println("请求的URL为:"+b);
		System.out.println("您的IP为:"+c);
	}
	
	
	private void Post(String b,String c){
		System.out.println("POST....OK!");
		System.out.println("请求的URL为:"+b);
		System.out.println("您的IP为:"+c);
	}
	
	
	
	private void Head(String b,String c){
		System.out.println("HEAD.....OK!");
		System.out.println("请求的URL为:"+b);
		System.out.println("您的IP为:"+c);
	}
	
	
	
	
	
	public static void close(){
		flag="YES";
	}
	
	
	
	public static void LookState(){
		if(sFlag.equals("2")){
			System.out.println("您的请求列队中");
		}else if(sFlag.equals("1")){
		System.out.println("您的请求正在执行");
		}else if(sFlag.equals("3")){
			System.out.println("您的请求非法");
		}
		
	}

}





package http.business;

public  class Safe implements ISafe{
	
	public Safe(String type,String url,String ip){
	
		this.TestHttpCommandSafe(type,url,ip);
	}
	

	public void TestHttpCommandSafe(String type,String url,String ip){
		
		
		CheckHttpCommandASafe check=new CheckHttpCommandSafe();
		check.checkHttpCommandSafe(type, url, ip);
	}
}



package http.business;

public abstract class CheckHttpCommandASafe {

	final void checkHttpCommandSafe(String type,String url,String ip){
		
		String ret1=GETandHTTPandPostSafe(type,url,ip);
		
		String ret2=checkRequestIpSafe(ip);
		
		if(ret1.equals("Success")&&ret2.equals("Success")){IHttp http=new Http(type,url,ip);}
	
	}
	
		abstract String GETandHTTPandPostSafe(String type,String url,String ip);
	
		abstract String checkRequestIpSafe(String url);
}




package http.business;

public class CheckHttpCommandSafe extends CheckHttpCommandASafe{



	
	public String GETandHTTPandPostSafe(String type,String url,String ip) {
		
		if(type.equals("GET")||type.equals("POST")||type.equals("HEAD")){
				return "Success";
				}else{
				System.out.println("您的请求指令有错,未被执行。请确定您输入的为:GET/POST/HEAD?");
				Http.sFlag="3";
				return "Error";
			}
		
	}

		
		
	

	
	public String checkRequestIpSafe(String ip) {
		
		String iIp[]={"000.000.000.000","255.255.255.255","888.888.888.888","444.444.444.444"};
		for(int j=0;j<iIp.length;j++){
			if(ip.equals(iIp[j])){
				    Http.sFlag="3";
					System.out.println("您的IP段非法,服务器拒绝您的请求。");
					return "Error";
				}
			}
			return "Success";
		
	}

}	




package http.test;


import http.business.Http;
import http.business.ISafe;
import http.business.Safe;

public class HttpGetTest {
	
	public void print(){
		System.out.println("-----------------------------------------------------------");
	}
	
	public static void main(String[] args) {
		
		HttpGetTest h=new HttpGetTest();
		
		ISafe get=new Safe("XXX","www.xxx.com","xxx.xxx.xxx.xxx");
		Http.LookState();
		h.print();
		
		ISafe get1=new Safe("YYY","www.xxx.com","xxx.xxx.xxx.xxx");
		Http.LookState();
		h.print();
		
		ISafe get11=new Safe("GET","11111","111111");
		Http.LookState();
		h.print();
		
		ISafe get22=new Safe("GET","22222","222222");
		Http.LookState();
		h.print();
		
		ISafe get33=new Safe("GET","3333333","333333");
		Http.LookState();
		h.print();
		
		ISafe get44=new Safe("GET","444444","444444");
		Http.LookState();
		h.print();
		
		ISafe get55=new Safe("GET","5555555","555555");
		Http.LookState();
		h.print();
		
		ISafe get10=new Safe("GET","www.2xxx.com","222.xxx.xxx.xxx");
		Http.LookState();
		h.print();
		
		ISafe get2=new Safe("GET","www.2xxx.com","222.xxx.xxx.xxx");
		Http.LookState();
		//Http.close(); 
		h.print();
		
		ISafe get3=new Safe("POST","www.3xxx.com","333.xxx.xxx.xxx");
		Http.LookState();
		Http.close();
		h.print();
		
		ISafe get4=new Safe("GET","www.xxx.com","000.000.000.000");
		Http.LookState();
		h.print();
		
		ISafe get5=new Safe("GET","www.xxx.com","188.888.888.888");
		Http.LookState();
		Http.close();
		h.print();
		
		ISafe get6=new Safe("GET","www.xxx.com","000.000.000.000");
		Http.LookState();
		Http.close();
		h.print();
	}

}




运行结果:


您的请求指令有错,未被执行。请确定您输入的为:GET/POST/HEAD?
您的请求非法
-----------------------------------------------------------
您的请求指令有错,未被执行。请确定您输入的为:GET/POST/HEAD?
您的请求非法
-----------------------------------------------------------
GET....OK!
请求的URL为:11111
您的IP为:111111
您的请求正在执行
-----------------------------------------------------------
GET....OK!
请求的URL为:22222
您的IP为:222222
您的请求正在执行
-----------------------------------------------------------
GET....OK!
请求的URL为:3333333
您的IP为:333333
您的请求正在执行
-----------------------------------------------------------
GET....OK!
请求的URL为:444444
您的IP为:444444
您的请求正在执行
-----------------------------------------------------------
GET....OK!
请求的URL为:5555555
您的IP为:555555
您的请求正在执行
-----------------------------------------------------------
GET....OK!
请求的URL为:www.2xxx.com
您的IP为:222.xxx.xxx.xxx
您的请求正在执行
-----------------------------------------------------------
GET....OK!
请求的URL为:www.2xxx.com
您的IP为:222.xxx.xxx.xxx
您的请求正在执行
-----------------------------------------------------------
POST....OK!
请求的URL为:www.3xxx.com
您的IP为:333.xxx.xxx.xxx
您的请求正在执行
-----------------------------------------------------------
您的IP段非法,服务器拒绝您的请求。
您的请求非法
-----------------------------------------------------------
GET....OK!
请求的URL为:www.xxx.com
您的IP为:188.888.888.888
您的请求正在执行
-----------------------------------------------------------
您的IP段非法,服务器拒绝您的请求。
您的请求非法
-----------------------------------------------------------

  • 大小: 11.9 KB
分享到:
评论
13 楼 treblesoftware 2009-07-09  
murainwood 写道
treblesoftware 写道
murainwood 写道
多看看基础知识,基本功打扎实些。做技术,有些东西往往是眼前浮云。
如果能用心在基础知识上多下些功夫,那样你的水平才能有全面提高。你现在有时间,这些时间对你来说,是宝贵的。工作以后,很难沉下心看基础的东西,切身体会。
做计算机,可选的路子其实并不只是开发SSH的Java企业应用这一条,你现在还没有定型,以后的路怎么走,能有什么样的机遇,谁都不知道。加强自身的技术素养吧,路还是宽些好,特别是对于白纸一张的学生而言。


。。。。。我彻底无语了,你说的话,就跟我对别人(我同学,我朋友)说的一模一样。你真应该看看我上面那段代码,我相信你从中可以看出我一直在学习软件基础。

你的代码我看了。我个人认为,没有什么大的价值。这样吧,我给你个思路,更好的去学习HTTP协议:
使用Socket编程,并实现一个自己的HTTP协议解析器。其实这个很容易^_^
好好加油吧。



你的思路完全跟我的不一样。你有你的想法,我有我的打算和想法。不说这些了。到此为止。
12 楼 murainwood 2009-07-09  
下一步,使用ServerSocket,实现对HTTP命令的解析,自己做一个简单的HTTP服务器
11 楼 murainwood 2009-07-09  
treblesoftware 写道
murainwood 写道
多看看基础知识,基本功打扎实些。做技术,有些东西往往是眼前浮云。
如果能用心在基础知识上多下些功夫,那样你的水平才能有全面提高。你现在有时间,这些时间对你来说,是宝贵的。工作以后,很难沉下心看基础的东西,切身体会。
做计算机,可选的路子其实并不只是开发SSH的Java企业应用这一条,你现在还没有定型,以后的路怎么走,能有什么样的机遇,谁都不知道。加强自身的技术素养吧,路还是宽些好,特别是对于白纸一张的学生而言。


。。。。。我彻底无语了,你说的话,就跟我对别人(我同学,我朋友)说的一模一样。你真应该看看我上面那段代码,我相信你从中可以看出我一直在学习软件基础。

你的代码我看了。我个人认为,没有什么大的价值。这样吧,我给你个思路,更好的去学习HTTP协议:
使用Socket编程,并实现一个自己的HTTP协议解析器。其实这个很容易^_^
好好加油吧。
10 楼 murainwood 2009-07-09  
treblesoftware 写道
murainwood 写道
treblesoftware 写道
murainwood 写道
居然连HTTP协议都搞清楚,GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,这些个命令都是干什么都不知道?
想我大学的时候,无非就是用VC写伯克利套接字来搞搞TCP/IP,这还是人人都必须会的平时作业。现在怎么都是SSH之类?



还有,大学里不教什么SSH。SSH只是我做项目的时候用。你做项目难道自己写框架?处理ORM,并发,安全,事物,拦截,验证?可笑之急。夜郎自大。

哟,你还真以为世界上只有SSH能做这些事情啊?给你提个醒,基础知识很重要,不要舍本逐末。




你一直说基础,你怎么知道我的基础很差呢?

你的基础怎么样,在这里,我无法看到一个全面。但单单从HTTP协议上来说,你的基础有所欠缺的,至于你对其他的网络协议是否熟悉,我不了解。如果有机会,我倒希望能面试你一下。
给你个Topic,想想现在的HTTP协议有什么优点,有什么缺点。我们是怎么利用其优点,怎么克服其缺点的,通过什么方式,在不同的应用场景下,这些方式有什么利弊?如果让你换种方式,该怎么实现,基于何种底层协议去实现....

我喜欢问这些发散性的问题,没有固定答案,但是能看出一个人的思考能力。
9 楼 treblesoftware 2009-07-09  
murainwood 写道
多看看基础知识,基本功打扎实些。做技术,有些东西往往是眼前浮云。
如果能用心在基础知识上多下些功夫,那样你的水平才能有全面提高。你现在有时间,这些时间对你来说,是宝贵的。工作以后,很难沉下心看基础的东西,切身体会。
做计算机,可选的路子其实并不只是开发SSH的Java企业应用这一条,你现在还没有定型,以后的路怎么走,能有什么样的机遇,谁都不知道。加强自身的技术素养吧,路还是宽些好,特别是对于白纸一张的学生而言。


。。。。。我彻底无语了,你说的话,就跟我对别人(我同学,我朋友)说的一模一样。你真应该看看我上面那段代码,我相信你从中可以看出我一直在学习软件基础。
8 楼 murainwood 2009-07-09  
多看看基础知识,基本功打扎实些。做技术,有些东西往往是眼前浮云。
如果能用心在基础知识上多下些功夫,那样你的水平才能有全面提高。你现在有时间,这些时间对你来说,是宝贵的。工作以后,很难沉下心看基础的东西,切身体会。
做计算机,可选的路子其实并不只是开发SSH的Java企业应用这一条,你现在还没有定型,以后的路怎么走,能有什么样的机遇,谁都不知道。加强自身的技术素养吧,路还是宽些好,特别是对于白纸一张的学生而言。
7 楼 treblesoftware 2009-07-09  
murainwood 写道
treblesoftware 写道
murainwood 写道
居然连HTTP协议都搞清楚,GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,这些个命令都是干什么都不知道?
想我大学的时候,无非就是用VC写伯克利套接字来搞搞TCP/IP,这还是人人都必须会的平时作业。现在怎么都是SSH之类?



还有,大学里不教什么SSH。SSH只是我做项目的时候用。你做项目难道自己写框架?处理ORM,并发,安全,事物,拦截,验证?可笑之急。夜郎自大。

哟,你还真以为世界上只有SSH能做这些事情啊?给你提个醒,基础知识很重要,不要舍本逐末。




你一直说基础,你怎么知道我的基础很差呢?
6 楼 murainwood 2009-07-09  
treblesoftware 写道
murainwood 写道
居然连HTTP协议都搞清楚,GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,这些个命令都是干什么都不知道?
想我大学的时候,无非就是用VC写伯克利套接字来搞搞TCP/IP,这还是人人都必须会的平时作业。现在怎么都是SSH之类?



还有,大学里不教什么SSH。SSH只是我做项目的时候用。你做项目难道自己写框架?处理ORM,并发,安全,事物,拦截,验证?可笑之急。夜郎自大。

哟,你还真以为世界上只有SSH能做这些事情啊?给你提个醒,基础知识很重要,不要舍本逐末。

5 楼 treblesoftware 2009-07-09  
murainwood 写道
居然连HTTP协议都搞清楚,GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,这些个命令都是干什么都不知道?
想我大学的时候,无非就是用VC写伯克利套接字来搞搞TCP/IP,这还是人人都必须会的平时作业。现在怎么都是SSH之类?



还有,大学里不教什么SSH。SSH只是我做项目的时候用。你做项目难道自己写框架?处理ORM,并发,安全,事物,拦截,验证?可笑之急。夜郎自大。
4 楼 treblesoftware 2009-07-09  
murainwood 写道
居然连HTTP协议都搞清楚,GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,这些个命令都是干什么都不知道?
想我大学的时候,无非就是用VC写伯克利套接字来搞搞TCP/IP,这还是人人都必须会的平时作业。现在怎么都是SSH之类?



每个人的学的东西都不一样,这不很正常么?这些很重要么?
只要有强大的学习能力,自学能力,还怕摸索不出这些东西来?GOOGLE一下,到处是资料,你还怕看不懂?你来我这故意捣蛋,能显示出你的什么?你的破坏水准?
我不欢迎你,请你离开。
3 楼 murainwood 2009-07-09  
居然连HTTP协议都搞清楚,GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,这些个命令都是干什么都不知道?
想我大学的时候,无非就是用VC写伯克利套接字来搞搞TCP/IP,这还是人人都必须会的平时作业。现在怎么都是SSH之类?
2 楼 treblesoftware 2009-07-05  
Saito 写道
应该是有两种. 一种是get 一种是post吧.

get参数跟在你的url后面.
post 跟在你的 请求体内..



呵呵,其实有3种。今天我正打算进行补充,昨天看了前几节,还没谈到。这个东西是跟着我学习进度走的。
1 楼 Saito 2009-07-05  
应该是有两种. 一种是get 一种是post吧.

get参数跟在你的url后面.
post 跟在你的 请求体内..

相关推荐

    使用Java模拟http请求.rar

    本教程将详细讲解如何使用Java来模拟HTTP请求。 首先,Java中常用的库有HttpURLConnection、Apache HttpClient和OkHttp。这里我们将主要讨论HttpURLConnection,它是Java标准库的一部分,无需额外引入依赖。使用...

    Java 模拟cookie登陆简单操作示例

    我们可以使用 Java 语言来发送 HTTP 请求,并将 Cookie 信息写入到 HTTP 头部中,以便模拟用户的登陆行为。 Java 模拟 Cookie 登陆的实现 下面是一个简单的 Java 模拟 Cookie 登陆的示例代码: ```java import ...

    java httpclient 模拟登录

    以下将详细介绍如何使用Java HttpClient进行模拟登录。 首先,我们需要在项目中引入HttpClient的相关依赖。如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.httpcomponents ...

    java模拟微信浏览器访问.rar

    这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们可以推测这是一个Java程序,用于模拟微信内置浏览器的行为。下面将详细介绍这个主题的相关知识点。 1. **Java HTTP ...

    java模拟HTTP传送

    java墨迹HTTP请求传送图片。其中服务端部分可以另找我下载

    java模拟淘宝登录源码

    Java模拟淘宝登录源码是一种常见的网络编程技术,主要用于自动化测试、数据抓取或者模拟用户行为。在这个场景中,我们使用的工具是HTTPClient库,这是一个强大的Java HTTP客户端应用编程接口,可以方便地处理HTTP...

    JAVA模拟http上传文件_代码男_新浪博客

    以上就是关于“JAVA模拟http上传文件”的核心知识点。通过理解并实践这些概念,开发者可以构建出稳定、高效的文件上传功能。在实际项目中,还可以结合Spring框架或其他Web库,简化文件上传的实现。

    java 模拟登录(含验证码)

    Java模拟登录的关键步骤包括: 1. **构建HTTP请求**:使用像`HttpURLConnection`或者第三方库如`Apache HttpClient`或`OkHttp`,创建一个指向登录页面的POST请求。你需要设置请求头,比如`Content-Type`通常设为`...

    Java模拟登录百度Demo

    在"Java模拟登录百度Demo"项目中,你将会看到这些步骤的实现,包括如何构造HTTP请求,处理响应,以及如何解析和验证登录结果。通过学习和实践这个Demo,你将能更好地理解和掌握Java在Web自动化中的应用,为其他类似...

    java发起http请求提交表单

    2. **使用Java模拟HTTP POST请求** 3. **表单参数处理** ### 1. 构建表单HTML字符串 在提供的代码片段中,我们首先看到的是构建了一个HTML表单字符串`strHtml`。这个字符串包含了表单的基本结构以及多个隐藏字段,...

    最新版java模拟QQ登录空间

    【Java模拟QQ登录空间】是Java编程领域中的一个实践项目,主要目的是通过编程技术实现对QQ空间的模拟登录。这个项目对于学习Java网络编程、HTTP协议、JSON解析以及网络安全等多方面知识具有重要意义。 首先,Java是...

    JAVA模拟网页发送请求

    本文详细介绍了如何使用Java模拟发送GET和POST请求,并对Cookie进行了处理。掌握了这些技术后,你就可以更灵活地与Web服务交互,实现自动化任务或数据抓取等功能。需要注意的是,在实际应用中还应考虑异常处理、编码...

    java模拟post请求

    java模拟客户端向服务器发送post请求

    java模拟网络通信

    在Java编程语言中,模拟网络通信是一个常见的任务,特别是在学习计算机网络原理或开发分布式系统时。这个场景描述了如何使用Java来实现两个程序之间的通信,就像位于不同地理位置的计算机一样,尽管在这里它们可能都...

    压力测试java模拟

    在IT行业中,压力测试是一种...总之,“压力测试java模拟”项目涉及了Java编程、压力测试理论、JMeter工具的使用等多个方面。通过深入学习和实践,我们可以有效地提升系统的性能和稳定性,为用户提供更加优质的服务。

    java模拟简易版的服务器

    HTTP是互联网上应用最广泛的一种应用层协议,Java可以通过HttpServer类(在`com.sun.net.httpserver`包中)来模拟HTTP服务器。 8. **异常处理**:网络编程中,必须考虑到各种可能的异常情况,如网络中断、客户端...

    java爬虫模拟登陆源码

    关于提供的"java模拟登陆"源码,它可能是实现了上述步骤的一个Java项目,可以直接在Eclipse中运行。在导入项目后,你可以通过阅读源代码了解具体实现细节,例如如何解析登录页面、构造请求、处理响应等。源码可能...

    java模拟ie 访问web

    本文将详细讲解如何使用Java模拟IE浏览器访问Web站点,主要涉及的知识点包括HTTP协议、HttpClient库以及相关的请求与响应处理。 首先,我们要理解HTTP协议的基本原理。HTTP(超文本传输协议)是互联网上应用最广泛...

Global site tag (gtag.js) - Google Analytics