2013-04-24 99 views
0

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

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:

工作流程= TSM \ 的SOAPAction = requestCreditBureau EIF = 3

  • 没有PARAMS在HttpServletRequest的服务器上,只有标题。
  • +0

    对不起,格式不正确。问题出在SOAPAction标题中。 – Dev 2013-04-24 12:36:43

    +0

    您发送了两次“POST/test-servlet/TestServlet HTTP/1.0”!你应该只发送一次。 – johnchen902 2013-04-24 12:37:55

    +0

    @Dev:你正在发送第一行两次,你确定这只是一个错字吗?另外,如果有任何需要更改的更改,您可以更新此问题。 – SuperSaiyan 2013-04-24 12:38:16

    回答

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

    0

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