我需要通过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();
这里有两个问题。
工作流程= TSM \ soapaction = requestCreditBureau eif = 3
答案 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。使用码头没有这样的问题。