我正在使用套接字爲給定服務器創建POST請求。響應大部分回來了,我使用InputStream和「UTF-8」編碼來讀取服務器的響應。大部分的迴應是有道理的,而且我能夠正確地查看HTML,但是,看起來隨機的,我看到諸如「1ffa」,「6e8」,「1972」,「90」,「0」等代碼出現我正在閱讀中的單行響應。以下是我如何創建和閱讀響應。使用套接字的HTTP響應中的隨機字符
String hostname = "server";
SocketFactory socketFactory = SSLSocketFactory.getDefault();
Socket socket = new Socket(hostname, 8080);
// Create streams to securely send and receive data to the server
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
PrintWriter writer = new PrintWriter(out);
writer.println("POST /handlerServlet http/1.1");
writer.println("Host: " + hostname);
String parameters="params=" + URLEncoder.encode("paramsToEncode", "UTF-8");
writer.println("Content-Length: " + parameters.length());
writer.println("Content-Type: application/x-www-form-urlencoded");
writer.println("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
writer.println("Keep-Alive: 115");
writer.println("Connection: keep-alive");
writer.println("\r\n" + parameters + "\r\n");
writer.flush();
// Read from in and write to out...
String input = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
StringBuffer result = new StringBuffer();
boolean startWriting = false;
FileOutputStream outStream1 = new FileOutputStream(new File("/file1.txt"));
Writer outWriter = new OutputStreamWriter(outStream1, "UTF-8");
while ((input = reader.readLine()) != null) {
result.append(input);
outWriter.write(input + "\n");
result.append('\n');
}
System.out.println(result.toString());
outWriter.close();
// Close the socket
in.close();
有沒有人有任何線索,爲什麼我會看到這樣的字符?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="http://server:8080/HW/YX+JpCEnNDe5B87CCyFj5KR7z9rqlwRK77aMm/44221331.htm">
1ffa
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
</head>
<body bgcolor="#ffffff">
<!-- Created by Oracle Reports 21:14 Tue Jun 29 09:14:32 PM, 2010 -->
....
<tr valign=top>
<td height=10></td>
<td width=80 colspan=3 align=center><font size=2 face="helvetica">V002A050001</font></td>
<
1ffa
td></td>
你可以看到,有這些字符出現在隨機位置會導致對HTML代碼的一些hecktick行爲。
謝謝。
爲什麼不使用['URLConnection'](http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests )或[Apache HttpComponents客戶端](http://hc.apache.org/httpcomponents-client/)?他們更透明地處理這個問題。 – BalusC 2010-06-30 01:31:08