簡體   English   中英

URLConnection無法發送完整的URL(java.net.SocketException:服務器上的文件意外結束)

[英]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編碼startTimeendTime參數。

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編碼的objectIDdir參數。

順便說一句, conditon.Dir[0]有一個錯字:應該是condition而不是conditon嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM