2013-04-24 96 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。使用碼頭沒有這樣的問題。