HTTP标头变为小写2

时间:2013-04-24 12:34:52

标签: java http post header

我需要通过http post发送UPPERcased标头。故事的第一部分被描述为here。现在它的套接字时间。 :)

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 recive:
  2.   

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

    1. 服务器上的HttpServletRequest中没有params,只有标题。

2 个答案:

答案 0 :(得分:1)

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

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协议。

答案 1 :(得分:0)

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