我正尝试使用Java创建一个简单的Web代理应用程序(不使用HTTPUrlConnection类)。使用Java套接字类连接到Web服务器
到目前为止,我已经成功地让我的服务器在端口10000上侦听,然后当我在浏览器中输入URL时接受客户端连接。
我现在需要我的代理将HTTP请求从浏览器转发到实际的Web服务器(我输入浏览器的URL)。
但是,我得到一个java.net.UnknownHostException:当试图创建我的代理和Web服务器之间的套接字连接。有谁知道什么可能导致这个问题?
以下是显示错误和完整代码的输出。很感谢任何形式的帮助!
Starting the socket server at port:10000
Listening.....
Socket[addr=/127.0.0.1,port=64099,localport=10000]has connected
URL IS http://www.hotmail.com
Can't connect
java.net.UnknownHostException: http://www.hotmail.com
import java.net.*;
import java.io.*;
public class Proxy {
private ServerSocket serverSocket;
private int port;
public Proxy(int port) {
this.port = port; }
public static void main(String[] args) {
int port = 10000;
try {
// initialize the proxy
Proxy proxy = new Proxy(port);
proxy.start();
}
catch (IOException e) {
e.printStackTrace();
}
}
public void start() throws IOException {
System.out.println("Starting the socket server at port:" + port);
serverSocket = new ServerSocket(port);
//Listen for client connection
System.out.println("Listening.....");
Socket client = serverSocket.accept();
//A client has connected to this server
verifyClient(client);
}
private void verifyClient(Socket client) throws IOException {
System.out.println(client + "has connected");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//Parse the HTTP request from the browser and find the URL
String request;
while ((request = in.readLine()) != null) {
if (request.contains("http://")){
StringBuilder sb = new StringBuilder(request);
sb.delete(0,4);
sb.delete(sb.length()-9,sb.length());
makeConnection(sb.toString());
break;}
in.close();
}
}
private void makeConnection(String url) throws IOException{
//Establish connection between proxy & web server on socket
try {
InetAddress addr;
URL aURL = new URL(url);
System.out.println("URL IS " + aURL.toString());
Socket server = new Socket(urlString,80);
addr = server.getInetAddress();
System.out.println("IP is: " + addr);
System.out.println("Connected to " + addr);
server.close();
}
catch (IOException e) {
System.out.println("Can't connect");
System.out.println(e);
}
}
如果我输入这个URL到我的浏览器中,我会看到一个页面,上面写着“找不到页面” – ControlAltDel 2014-09-29 16:53:20
啊,这是我的错,我粘贴输出时,我从问题页面重新调整。上述错误发生在我尝试的任何网站上。我已经更新了这个问题以避免混淆。 – user3792362 2014-09-29 16:57:09
如果您需要将套接字连接到www.stackoverload.com,如果之后包含路径,则会出现错误 – ControlAltDel 2014-09-29 16:57:35