Я использую сервер Tomcat с несколькими виртуальными хостами, и мне нужно отправить некоторые данные сервлету на этом сервере из другого сервлета на другом сервере. Поскольку сервер, на котором я размещаю сообщения, использует виртуальные хосты, просто ссылаясь на этот хост по его 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();
Есть идеи?