【发布时间】:2010-10-24 07:57:01
【问题描述】:
我正在运行一个带有一些虚拟主机的 Tomcat 服务器,我需要从另一台服务器上的另一个 servlet 向该服务器上的一个 servlet 发布一些数据。因为我发布到的服务器使用虚拟主机,只是通过它的 IP 地址引用该主机会导致问题(它不知道我要与哪个虚拟主机通信)。
这是我运行 HTTP 1.0 POST 到“sub.example.com”的代码,但在这个例子中,“example.com”只知道将请求路由到正确的子域,如果它被配置为默认。这是因为要求向 Socket 传递 InetAddress 而不是主机名。
String host = "sub.example.com";
int port = 80;
String path = "/Servlet";
StringBuilder data = new StringBuilder();
data.append(URLEncoder.encode("NameA", "UTF-8")).append('=').append(URLEncoder.encode("ValueA", "UTF-8"));
data.append('&').append(URLEncoder.encode("NameB", "UTF-8")).append('=').append(URLEncoder.encode("NameB", "UTF-8"));
InetAddress addr = InetAddress.getByName(host);
Socket socket = new Socket(addr, port);
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
wr.write("POST "+path+" HTTP/1.0\r\n");
wr.write("Content-Length: "+data.length()+"\r\n");
wr.write("Content-Type: application/x-www-form-urlencoded\r\n");
wr.write("\r\n");
// Send data
wr.write(data.toString());
wr.flush();
wr.close();
有什么想法吗?
【问题讨论】:
标签: java