`
accpxudajian
  • 浏览: 456452 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.util.*" %>
<%@ page language="java" import="java.net.URL" %>
<%@ page language="java" import="java.net.HttpURLConnection" %>
<%@ page language="java" import="java.nio.charset.Charset" %>
<%@ page language="java" import="java.io.*" %>
<%@ page language="java" import="javax.servlet.ServletOutputStream" %>
<%@ page language="java" import="java.awt.*" %>
<%@ page language="java" import="java.awt.image.BufferedImage" %>
<%@ page language="java" import="java.awt.image.*" %>
<%@ page language="java" import="java.awt.Color" %>
<%@ page language="java" import="javax.imageio.ImageIO" %>
<%@ page language="java" import="com.sun.image.codec.jpeg.*" %>
<%
	String targetUrl=request.getParameter("url");
	String method=request.getParameter("requestmethod");
	String content="";
	String proxyType = "text";//代理类型[文本代理text,图片代理img]
	//解码
	targetUrl = new String(targetUrl.getBytes("ISO-8859-1"),"UTF-8");
	StringBuffer temp=null;

	HttpURLConnection urlConnection = null;   
    request.setCharacterEncoding("utf-8");

    response.setContentType("text/html;charset=utf-8");
    String prjName=request.getContextPath();
    	//用于转发gb2312格式的串
    String proxygb2312="http://"+request.getLocalAddr()+":"+request.getLocalPort()+prjName+"/webpage/utils/proxy/httpproxygb2312.jsp";
    
    if(targetUrl==null) return;
    else
    {
    	targetUrl=targetUrl.replaceAll(":::","&");
    }
    if(method==null)
    {
    	method="GET";
    }
    else
    {
    	method=method.toUpperCase();
    }
    URL url = new URL(targetUrl);   
    urlConnection = (HttpURLConnection) url.openConnection();   
    urlConnection.setRequestMethod(method);   
    urlConnection.setDoOutput(true);   
    urlConnection.setDoInput(true);   
    urlConnection.setUseCaches(false);   
     
     try {   
         InputStream in = urlConnection.getInputStream(); 
         
         //首先尝试用utf-8解码
         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in,"utf-8"));   
         
         temp = new StringBuffer();   
         String line = bufferedReader.readLine();   
         while (line != null) 
         {   
             temp.append(line).append("\r\n");   
             line = bufferedReader.readLine();   
         }   
         bufferedReader.close();   
         content = temp.toString(); 

         //解析头文件--获取字符串的编码方式
         String testContent=content;
         //如果是GB2312编码格式,再做gb2312转换
         if(testContent.toLowerCase().indexOf("encoding=\"gb2312\"")!=-1 || testContent.toLowerCase().indexOf("encoding='gb2312'")!=-1)
         {
         	content="";
         	String reloadProxy=proxygb2312+"?requestmethod=get&url="+targetUrl.replaceAll("&",":::");
         	url = new URL(reloadProxy);   
		    urlConnection = (HttpURLConnection) url.openConnection();   
		
		    urlConnection.setRequestMethod(method);   
		    urlConnection.setDoOutput(true);   
		    urlConnection.setDoInput(true);   
		    urlConnection.setUseCaches(false);
		    
		    in = urlConnection.getInputStream(); 
	        bufferedReader = new BufferedReader(new InputStreamReader(in,"GB2312"));   
	         
	         temp = new StringBuffer();   
	         line = bufferedReader.readLine();   
	         while (line != null) 
	         {   
	             temp.append(line).append("\r\n");   
	             line = bufferedReader.readLine();   
	         }   
	         bufferedReader.close(); 
	         content = temp.toString(); 
		 }
         else
         {
        	 //TODO 图片代理(目前仅适用于IE)
        	request.setCharacterEncoding("utf-8");
            Image srcImage = javax.imageio.ImageIO.read(url);   
            if(srcImage!=null){
            	proxyType = "img";//TODO 标记为图片代理
            	content="";
	            //保持原始宽高
	            int old_w=srcImage.getWidth(null);  //更改大小可制作缩略图                                   
	            int old_h=srcImage.getHeight(null); //更改大小可制作缩略图
	            BufferedImage tag = new BufferedImage(old_w,old_h,BufferedImage.TYPE_INT_RGB);
	            Color bgcolor = new Color(255,255,255);//白色背景色
	            tag.getGraphics().drawImage(srcImage,0,0,old_w,old_h,bgcolor,null);    
	            
	            FileOutputStream newimage=new FileOutputStream("png.png");          
	            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);      
	            encoder.encode(tag);                                               
	            newimage.close();   
	            ImageIO.write(tag, "JPG", response.getOutputStream());
	            //TODO 用于屏蔽servlet的异常
	            out.clear();
	            out=pageContext.pushBody();
            }
         }
     } catch (IOException e) {   
     	e.printStackTrace();
         throw e;   
     } finally {   
         if (urlConnection != null)   
             urlConnection.disconnect();   
     }
%>
<%
	//不是图片代理则输出文本
	if(!"img".equals(proxyType)){
		%>
			<%=content%>
		<%
	}
%>

 

 

/*
作用:
	- 解决跨域访问的问题。
实现:
	- 文本内容的代理(多用于请求服务)
	- 图片文件的代理

使用范例:
	- 文本代理:http://localhost:8080/exchange//webpage/utils/proxy/httpproxy.jsp?requestmethod=post&url=http://172.16.10.6:8080/sgs/actions/getCatalogs.action?userId=41:::catalogType=1:::catalogCode=330000000000020000:::show=true&_dc=1348106642931
	- _dc是自动添加的随机数

	- 图片代理:http://localhost:8080/exchange//webpage/utils/proxy/httpproxy.jsp?requestmethod=post&url=http://www.baidu.com/img/baidu_sylogo1.gif

*/
 

 

 

 

 

 

愤怒的coder- 钓鱼岛是中国的

 

 

分享到:
评论

相关推荐

    C#实现HTTP代理

    在IT行业中,HTTP代理是一种网络通信机制,它允许客户端(如Web浏览器)通过另一台服务器作为中介来访问互联网上的资源。这种技术常用于提高匿名性、优化网络性能或绕过特定的网络限制。本篇文章将深入探讨如何使用...

    HTTP代理穿透方法

    ### HTTP代理穿透方法详解 #### 一、引言 HTTP代理穿透是指客户端通过HTTP代理服务器访问互联网资源的技术手段。在很多场景下,由于网络安全策略或技术限制,客户端不能直接访问某些资源,这时就需要借助HTTP代理...

    基于C++设计与实现HTTP代理服务器【100011743】

    设计并实现一个基本 HTTP 代理服务器。要求在指定端口(例如 8080)接收来自客户的 HTTP 请求并且根据其中的 URL 地址访问该地址所指向的 HTTP 服务器(原服务器),接收 HTTP 服务器的响应报文,并将响应报文转发给...

    Visual C#实现HTTP代理服务程序

    【Visual C#实现HTTP代理服务程序】 HTTP代理服务程序是一种在网络中起到中转作用的软件,允许客户端(如浏览器)通过代理服务器访问互联网上的资源。HTTP代理服务是针对HTTP协议设计的,它工作在TCP/IP参考模型的...

    商道HTTP代理IP验证工具

    "商道HTTP代理IP验证工具"就是针对这一需求设计的一款实用软件,它专为批量验证HTTP代理IP的可用性而生。下面,我们将详细探讨这款工具的功能、工作原理以及其在实际使用中的价值。 首先,我们要理解什么是代理IP。...

    HTTP 代理服务器在 Windows下的实现

    HTTP代理服务器在Windows环境下主要起到中介的作用,允许客户端(如Web浏览器)通过它与外部互联网进行通信。这种设置有助于提高网络性能、实现访问控制、监控网络活动以及在多用户环境中节省公网IP地址。本文将详细...

    简单HTTP代理服务器-源码c++

    在IT领域,网络通信是不可或缺的一部分,而HTTP代理服务器在其中扮演着重要的角色。本文将深入探讨基于C++实现的简单HTTP代理服务器及其相关知识点。 首先,我们需要理解HTTP(超文本传输协议)的基本原理。HTTP是...

    HTTP代理IP检测高达

    HTTP代理IP检测高达,哇咔咔。安全无毒。

    Java编写的HTTP代理

    Java编写的HTTP代理是一种软件应用,它允许用户通过Java程序作为中介来访问互联网,从而实现对HTTP请求的转发。这种代理服务器通常用于多种用途,包括网络匿名性、内容过滤、性能优化以及网络测试等。在Java中实现...

    完全自助开发的HTTP代理程序

    标题 "完全自助开发的HTTP代理程序" 描述了一个项目,该项目是作者独立完成的,旨在理解和实现HTTP代理服务器的工作原理。这个程序能够处理HTTP协议的数据解包与打包,包括对chunked编码的处理,这对于理解HTTP协议...

    C#版的HTTP代理源码(完整版) (支持MSN和QQ代理上网)

    本文将深入探讨C#实现的HTTP代理源码,特别关注其支持MSN和QQ代理上网的功能。 首先,我们需要理解HTTP代理的基本概念。HTTP代理是一种服务器,它充当客户端与目标Web服务器之间的桥梁。客户端通过HTTP代理发送请求...

    HTTP代理服务器java

    HTTP代理服务器java 简单网站过滤

    Http 代理服务器 (源码)

    HTTP代理服务器是一种网络服务,它允许客户端(如Web浏览器)通过该服务器与目标服务器进行通信。在本场景中,我们有一个名为"Http 代理服务器 (源码)"的项目,这是一个控制台应用程序,专为VC6(Visual C++ 6.0)...

    delphi编写的简单http代理源代码

    在这个主题中,我们关注的是使用Delphi编写的一个简单的HTTP代理服务器的源代码。HTTP代理是网络通信中的一个重要概念,它作为客户端和互联网之间的中介,允许用户通过代理服务器访问网页和其他在线资源。 在Delphi...

    http代理http代理http代理http代理

    http代理源代码http代理http代理http代理http代理http代理

    简单HTTP代理服务器

    【简单HTTP代理服务器】是一种网络通信工具,它允许用户通过该服务器作为中介,与互联网上的其他服务器进行交互。这样的设计可以用于多种目的,包括隐私保护、网络访问控制、负载均衡等。在这里,我们讨论的是一个自...

    vc++http代理服务器

    本项目"vc++http代理服务器"是一个使用VC++6.0和MFC开发的HTTP代理服务器软件。对于VC++和MFC编程爱好者来说,这是一个很好的学习资源,可以深入理解网络编程、多线程处理、套接字编程以及代理服务器的工作原理。 ...

    SOCK-HTTP代理协议解析

    ### SOCK-HTTP代理协议解析 #### 一、引言 随着互联网技术的不断发展与网络环境的日益复杂化,为了确保网络安全、控制访问权限以及优化网络性能,越来越多的企业和个人选择使用代理服务。代理服务通过中间服务器...

Global site tag (gtag.js) - Google Analytics