0

我需要通过 http post 发送大写的标头。故事的第一部分在这里描述。现在它的套接字时间。:)

Socket s = new Socket(InetAddress.getByName("localhost"), 8080);
PrintWriter pw = new PrintWriter(s.getOutputStream());
//      PrintStream pw = System.out;
pw.println("POST /test-servlet/TestServlet HTTP/1.0");
String params = "key1=value1&key2=value2";
pw.println("accept = text/xml");
pw.println("accept-language: ru");
pw.println("SOAPAction: requestCreditBureau");
pw.println("eif: 3");
pw.println("host: localhost");
pw.println("content-length: " + params.getBytes().length);
pw.println();
pw.println(params);
pw.println();
pw.flush();

BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String t;
while((t = br.readLine()) != null) System.out.println(t);
br.close();

这里有两个问题。

  1. 它不起作用。:) 服务器的 servlet 接收:

工作流 = TSM \soapaction = requestCreditBureau eif = 3

  1. 服务器上的 HttpServletRequest 中没有参数,只有标头。
4

2 回答 2

1

println()方法将使用系统行分隔符来发送换行符。\r\nHTTP 定义了作为行分隔符的严格用法。所以你应该硬编码换行符:

pw.print("SOAPAction: requestCreditBureau\r\n");
pw.print("eif: 3\r\n");
pw.print("host: localhost\r\n");
pw.print("content-length: " + params.getBytes().length + "\r\n");
pw.print("\r\n");

考虑使用java.net.HttpURLConnection而不是自己实现 HTTP 协议。

于 2013-04-24T13:31:04.207 回答
0

谢谢!问题是我使用了tomcat7。使用jetty没有这样的问题。

于 2013-04-24T15:54:55.197 回答