如何使用Socket类在Java中发布HTTP 1.1 Post?

Jas*_*ske 1 java

我正在运行带有一些虚拟主机的Tomcat服务器,我需要将一些数据从另一台服务器上的另一个servlet发送到此服务器上的servlet.因为我要POST的服务器使用虚拟主机只是通过它的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();
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Ste*_*Kuo 6

您可能需要考虑使用Apache HttpClient而不是执行原始套接字通信.