[英]Caused by: java.net.SocketException: Unexpected end of file from server
[英]URLConnection does not send full URL (java.net.SocketException: Unexpected end of file from server)
我從URLConnection使用Java調用URL
http://192.168.2.107/cgi-bin/mediaFileFind.cgi?action=findFile&object=27891384&condition.Channel=0&conditon.Dir[0]="/mnt/sd"&condition.StartTime=2014-8-1 00:00:00&condition.EndTime=2014-8-31 23:59:59
但是當我捕獲使用wire-shark的HTTP傳輸時。 URL下的線鯊捕獲
Full request URI: http://192.168.2.107/cgi-bin/mediaFileFind.cgi?action=findFile&object=28048800&condition.Channel=0&conditon.Dir[0]="/mnt/sd"&condition.StartTime=2014-8-1
這意味着我的完整URL所在的URL上的數據丟失沒有發送到服務器,這就是為什么錯誤生成了我的Java代碼是
public String intilizeObject(String IP, String user, String pass, String objectID, String dir, String startTime, String endTime) {
String result = "";
try {
String URL = "http://" + IP + "/cgi-bin/mediaFileFind.cgi?action=findFile&object=" + objectID + "&condition.Channel=0&conditon.Dir[0]=\"" + dir + "\"&condition.StartTime=" + startTime + "&condition.EndTime=" + endTime;
String authString = user + ":" + pass;
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authStringEnc = new String(authEncBytes);
URL url = new URL(URL);
System.out.println(url);
URLConnection urlConnection = url.openConnection();
urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
InputStream is = urlConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
int numCharsRead;
char[] charArray = new char[1024];
StringBuffer sb = new StringBuffer();
while ((numCharsRead = isr.read(charArray)) > 0) {
sb.append(charArray, 0, numCharsRead);
}
result = sb.toString();
} catch (Exception e) {
result = e.toString();
}
return result;
}
幫幫我,我無法了解那里發生的事情
您的網址字符串中2014-8-1和23:59:59之間有一個空格。(2014-8-31 23:59:59)。 這可能會導致問題Url不能包含空格。
“ URL不得包含文字空間。必須使用百分比編碼或使用URL安全字符的其他編碼對URL進行編碼”
您必須對空格進行編碼
嘗試使用URL編碼startTime
和endTime
參數。
String URL = "http://" + IP + "/cgi-bin/mediaFileFind.cgi?action=findFile&object=" +
objectID + "&condition.Channel=0&conditon.Dir[0]=\"" + dir +
"\"&condition.StartTime=" + URLEncoder.encode(startTime, "UTF-8") +
"&condition.EndTime=" + URLEncoder.encode(endTime, "UTF-8");
這兩個參數都在其中包含空格,並且在URL中,空格應表示為%20
或+
。
您可能還需要考慮對URL編碼的objectID
和dir
參數。
順便說一句, conditon.Dir[0]
有一個錯字:應該是condition
而不是conditon
嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.