關於java.io.IOException: Server returned HTTP response code: 400 for URL報錯和string.getBytes()字元集

來源:互聯網
上載者:User

標籤:擷取   write   lin   適應   響應   amr   lines   自己   disco   

400 請求出錯:由於文法格式有誤,伺服器無法理解此請求
總論:這種錯誤應該會有很多原因,這裡指出的是因為字元集編碼的原因導致400,主要代碼:向伺服器發送請求傳輸json參數用的是out.write(json.getBytes())(讀取的是作業系統的字元集,如果作業系統與部署項目的伺服器不同則報錯);改為out.writeChars(json);或out.write(json.getBytes(伺服器編碼))即可。如下代碼16行

 1             //建立串連              2             URL url = new URL(u); 3             HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 4             connection.setDoOutput(true); 5             connection.setDoInput(true); 6             connection.setRequestMethod("POST"); 7             connection.setRequestProperty("connection", "keep-alive"); 8             connection.setConnectTimeout(30000); 9             connection.setReadTimeout(30000);10             connection.setUseCaches(false);11             connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");12             connection.connect();13             // POST請求 14              out = new DataOutputStream(connection.getOutputStream());15             String json = message.toString();16             out.writeChars(json); // 這行是關鍵我之前寫的是 out.write(json.getBytes());17             System.out.println(json);18             out.flush();19             // 讀取響應 20             reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));21             String lines;22             StringBuffer sb = new StringBuffer("");23             while ((lines = reader.readLine()) != null) {24                 lines = new String(lines.getBytes(), "utf-8");25                 sb.append(lines);26             }27             JSONObject jsStr =JSONObject.fromObject(sb.toString());28             //擷取響應值,判斷是否驗證通過29             String code = (String) jsStr.get("code");30             String msg=(String) jsStr.get("msg");31             System.out.println("code:"+code+",msg:"+msg);32             //介面返回驗證資料是否通過33                 if("0".equals(code)){34                     result = "success";35                 } else{36                     result = "fail";37                     System.out.println("下發出錯:錯誤原因為" + msg + "下發內容為:" + json);38                 }        39             reader.close();40             // 中斷連線 41             connection.disconnect(); 42             

這其中也經過一些波折,比如在自己的eclipse上運行正常,部署到伺服器上就不行了,json資料是一樣的但是因為自己本地的伺服器和部署項目的伺服器編碼不同,而產生這種錯誤。

在解決問題時百度做了很久,因為不適應我的項目做了一些錯誤的更改,比如找空格,在我的json中是存在空格的,但是我用的是post提交,並不會有影響。還有說要雙引號轉成單引號的,這讓原本本地不報錯的程式也報錯了,可是我還傻傻的開心以為是引號的事。還有讓轉json編碼的,但是無論json轉成什麼格編碼out.write(json.getBytes()) 傳輸的時候編碼格式沒有設定,還是去預設作業系統的編碼還是不會改對

 

關於java.io.IOException: Server returned HTTP response code: 400 for URL報錯和string.getBytes()字元集

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.