我已经使用Java NIO频道实现了简单的代理服务器,但有问题,一些网站运行良好,但其他网站提供了有关未知路径的错误或在其主机的技术页面上重定向,并显示资源不存在的消息。是我的错还是某些网站不允许代理?
ProxyServer的工作原理如下:我输入'localhost',在浏览器中我重新访问在代码中设置的站点。从浏览器请求我只是以这种方式重新发送到目标网站:
private void connect(SelectionKey key) throws IOException {
SocketChannel channel = ((SocketChannel) key.channel());
Attachment attachment = (Attachment) key.attachment();
channel.write(attachment.buffer);
}
所以'key' - 是目标站点的SelectionKey,在attachment.buffer中我存储了发送给代理服务器的请求。
那么,我的代码或它刚刚关闭的网站代理机会?
更新1。我想,我发现了一个问题。因为我将请求从localhost重定向到远程服务器AS IS因此在字段HOST中的请求中我有'localhost'。似乎有些网站忽略了这个字段,其他尝试使用并重定向到404页面,导致无法找到'localhost'我要求的。那么问题是如何在目标服务器名称上更改请求中的字段“主机”?
答案 0 :(得分:0)
目标服务器不了解您的NIO代码,或者您是代理还是真正的客户。
如果您有一个错误页面,代理正在运行,并且正在代理的资源就是问题:它不存在,您没有访问权限等等。你可以在你的代码中做到这一点,没有理由为什么你应该担心。只需将错误页面发送到客户端,就像发送其他任何内容一样。
为什么这个方法在没有连接时会调用connect()并做其他事情?
答案 1 :(得分:0)
我发现了一个问题。在代理包含'localhost'之后提交HOST,因此一些网站接受它,其他网站不接受。用真正的主机替换此字段的值可以解决问题。