2012-10-16 131 views
-1

我正在尝试创建代理服务器。从网站读取字节

我想逐字节读取网站,以便我可以显示图像和所有其他东西。我尝试了readLine,但无法显示图像。你有什么建议,我可以改变我的代码,并发送所有数据与DataOutputStream对象浏览器?

try{ 
    Socket s = new Socket(InetAddress.getByName(req.hostname), 80); 
    String file = parcala(req.url); 
    DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()); 
    BufferedReader dis = new BufferedReader(new InputStreamReader(s.getInputStream())); 
    PrintWriter socketOut = new PrintWriter(s.getOutputStream()); 
    socketOut.print("GET "+ req.url + "\n\n"); 
    //socketOut.print("Host: "+req.hostname); 
    socketOut.flush(); 
    String line; 
    while ((line = dis.readLine()) != null){ 
     System.out.println(line); 
    } 
} 
catch (Exception e){} 
} 

编辑部分

这是我应该做的。我可以封锁禁止的网站,但不能在我的程序中允许其他网站。

在过滤程序中,您将在指定端口打开一个TCP套接字并等待连接。如果有一个 请求(即客户端键入访问网站的URL),应用程序将处理它到 决定是否允许访问,然后,使用相同的套接字,它会将回复发回 到客户。当客户端打开她与WebPolice的连接(并且她的请求已被检查 并且被允许)后,真正的网页需要被显示给客户端。因此,由于用户已经提出了她的请求,现在轮到WebPolice转发请求,以便用户可以获得该网页。因此,WebPolice充当客户端并请求网页。这意味着您需要打开与Web服务器的连接(不关闭与用户的连接),通过此连接转发请求,获取答复并将其转发回客户端。您将使用线程处理多个连接(同时和/或在不同的时间)。

+2

'赶上(例外五){}'失去一开始 – artbristol

+3

请请请请不要尝试编写自己的代理服务器,甚至是Apache的HTTP本身建议不使用自己的代理服务器,除非你知道你'正在做,而且这个代码已经在YEARS成熟了。其他人可以使用未受保护的代理服务器来屏蔽流量。 – dardo

+1

如果这不是一个类的项目,我建议不写你自己的代理服务器。 – aglassman

回答

0

我不知道你到底想要做什么,但是制作一个HTTP请求并阅读它的响应比你在这里做的要多一些。 Readline无论如何都不能用于二进制数据。

你可以在URLConnection类(stolen here)一起来看看:

URL oracle = new URL("http://www.oracle.com/"); 
URLConnection yc = oracle.openConnection(); 
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); 

然后你可以阅读从in对象的文本或二进制数据。

+0

我必须这样做,而不使用URLConnection类。 –

+0

我应该使用套接字和http请求(获取,发布等...) –

+0

@AhmetTanakol **为什么**?正如我所说的,创建和阅读HTTP流量并不容易。您对HTTP请求的最佳猜测可能在一台服务器上运行,并在另一台服务器上运行;答案也一样(例如,你可以处理块吗?)。如果你想让它在任何情况下都能正常工作,请阅读这篇文章(http://tools.ietf.org/html/rfc2616),祝你好运。 “URLConnection”类及其辅助类背后的人已经为你解决了所有问题;如果你拒绝使用它,并认为你自己可以做得更好,它甚至会变得无礼。 – CodeCaster

0

读线将视读作字符串的行,所以,除非你想用过来的字节转换浪费时间,我不会建议。

我只想读取的字节,直到你可以不再读书了,然后将其写入到一个文件,这应该让您抓住图像,完整地保留文件头比文字其他文件处理时也很重要。

希望这会有所帮助。

+0

我想抓住图像,如何将字节写入文件可以帮助我做到这一点?我想要做的是在获取内容后,我想将这些信息传递给浏览器,并打开包含图像,文本等的页面... –

+0

如果您尝试显示存在于其他页面上的图像,为什么你是否试图通过Java读取它,为什么不只是找出图像的URL并在img标签中使用它? – dardo

+0

可能试图从另一个网站上抓取数据,并用自己的网址显示它。 – aglassman