我已经使用 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 重定向到远程服务器,所以在字段 HOST 中的请求中我有“localhost”。似乎有些站点忽略了此字段,其他站点尝试使用并重定向到 404 页面,因为找不到我要的“本地主机”。所以问题是如何在目标服务器名称的请求中更改字段“主机”?