我发现这篇关于在JAVA中实现的简单代理服务器的文章:
http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm
代码只是从客户端获取一些流,然后将其发送到服务器,然后从服务器获取流并将响应发送到客户端.我想要做的是在发送之前压缩这些流,并在收到之后对其进行解压缩.
我找到了班级,GZIPInputStream但我不确定如何使用它,我在互联网上找到的并没有帮助我.我要么不明白这么多,要么对我来说不是一个好的解决方案.
我的想法也是如此,但我不确定它是否正常:
final InputStream streamFromClient = client.getInputStream();
final OutputStream streamToClient = client.getOutputStream();
final InputStream streamFromServer = server.getInputStream();
final OutputStream streamToServer = server.getOutputStream();
InputStream gzipStream = new GZIPInputStream(streamFromClient );
try
{
while ((bytesRead = gzipStream.read(request)) != -1)
{
streamToServer.write(request, 0, bytesRead);
streamToServer.flush();
}
}
catch (Exception e) {
System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud)
现在发送到服务器的数据应该在发送之前进行压缩(但我不确定它是否是正确的解决方案).是吗?
现在假设服务器向我发送压缩数据.所以这个流:
final InputStream streamFromServer = server.getInputStream();
Run Code Online (Sandbox Code Playgroud)
被压缩了.
我怎样才能解压缩并写入
final OutputStream streamToClient = client.getOutputStream();
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助,伙计们!
我正在尝试从我从浏览器发送的应用程序发送相同的信息.以下是Fiddler捕获的数据的一部分:
POST http://something/ HTTP/1.1
Host: something.com
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
我遇到了这个连接属性.如果我将属性keep-alive设置为true,在Fiddler中我看到:
代理连接:保持活跃
如果我尝试将连接属性设置为Keep-alive,则会收到以下错误:
使用此属性可能无法设置Keep-Alive和Close.
如何编写代码,以便在Fiddler中我可以看到:
连接:保持活力
我的完整代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://myUrl ");
request.Method = "POST";
request.ProtocolVersion = HttpVersion.Version11;
request.Accept = "*/*";
WebHeaderCollection headers = new WebHeaderCollection();
headers.Add("Accept-Encoding", "myEncoding");
headers.Add("Accept-Language", "myLang");
request.Headers = headers;
request.ContentType = "myContentType";
request.Referer = "myReferer";
request.UserAgent = "myUserAgent";
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "myData";
byte[] data = encoding.GetBytes(postData);
request.GetResponse().Close();
Run Code Online (Sandbox Code Playgroud)