纠结了好几天发现原来客户端在请求数据的时候发送了xml格式的数据,在服务器端进行转发的时候同时需要转发这些请求数据,然后才能得到正确的响应数据。下面对之前的代码进行了修改
package org.proxy.servlet;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
public class Proxy extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(request.getContentType());
request.setCharacterEncoding("UTF-8");
String query = request.getParameter("url");
PostMethod post = new PostMethod(query);
post.setRequestBody(request.getInputStream());
post.setRequestContentLength(request.getContentLength());
post.setRequestHeader("Content-type", "text/xml; charset=UTF-8");
HttpClient client = new HttpClient();
client.executeMethod(post);
PrintWriter out = response.getWriter();
try{
BufferedInputStream in = new BufferedInputStream(post.getResponseBodyAsStream());
int item;
while((item = in.read())!=-1){
out.print((char)item);
}
out.flush();
in.close();
out.close();
}catch(IOException e){
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Exception:"+e);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(request.getContentType());
request.setCharacterEncoding("UTF-8");
String query = request.getParameter("url");
PostMethod post = new PostMethod(query);
post.setRequestBody(request.getInputStream());
post.setRequestContentLength(request.getContentLength());
post.setRequestHeader("Content-type", "text/xml; charset=UTF-8");
HttpClient client = new HttpClient();
client.executeMethod(post);
PrintWriter out = response.getWriter();
try{
BufferedInputStream in = new BufferedInputStream(post.getResponseBodyAsStream());
int item;
while((item = in.read())!=-1){
out.print((char)item);
}
out.flush();
in.close();
out.close();
}catch(IOException e){
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Exception:"+e);
}
}
}
分享到:
相关推荐
我自己用eclipse写的java代码,可以直接用eclipse导入,也可以直接用java -jar proxy_sample.jar执行 代码量很小,尽量通过注释进行说明 本例实现了InvocationHandler接口,代码具有典型性 在研究代理模式(Proxy...
NULL 博文链接:https://cn-done.iteye.com/blog/1743191
利用JAVA代理Proxy机制实现spring对ibaits的MapperScannerConfigurer功能 详细:http://blog.csdn.net/wq105032007067/article/details/8812598
JdkProxy.java
JAVA动态代理,采用Proxy与InvocationHandler实现。
java proxy 代理,全套开发code,带注释,以及相关工具
java实现的proxy_最终版本,可以实现htpps代理
JAVA 通过proxy代理方式访问internet资源,
代理模式java代码 Proxy(4) 开发宝典......
是一个实现了代理服务的类。当有客户端连接时调用serve()方法,可以在客户和服务器端传输数据。
Websocket反向代理的Java实现。 与描述的方法类似,但使用Java实现。 这在Java应用程序服务器(例如Spring Boot)中可能很有用。 在根级别有一些nodejs脚本,可用于模仿验证代理服务器所需的功能。 常见的是脚本,...
Java 实现免费代理IP的获取方式 并动态实时校验是否有效,java文件项目内含有Jsoup的Jar包(Jsoup是加工过的,含请求),有2个主入口程序: 其一:用于请求代理IP,并立即校验是否是一个有效的代理IP,如果有效,...
代理模式java代码 Proxy(1) java 学习必备......
用sun的JDK API实现java的动态代理类
zabbix_get是zabbix获取监控项的可执行文件,通过指定监控的机器以及端口、监控key,可以获取相应的监控value。...我们可以通过java-proxy对java进行jmx监控,获取java-proxy的监控项比较特殊,所以需要具体的脚本。
MySQL Proxy 实现负载均衡测试 MySQL Proxy 实现负载均衡测试
NULL 博文链接:https://sunlibao123.iteye.com/blog/1837500
一个可以用来制作Hypixel加速线路的工具 自己写的哦 使用方法很简单直接使用java -jar TCP-Proxy.jar启动它就可以了 原理的话是使用Java实现TCP数据转发
http代理,java开发,有3个工程
esri.config.defaults.io.proxyUrl is not set所缺文件 proxy.jsp、proxy.ashx、proxy.php、proxy.config