2016-06-26 177 views
0

我無法使用Java請求POST服務。當我在終端上使用捲曲它的工作原理:HTTP響應碼:400的URL?

curl -i -H "Content-Type: application/json" -X POST -d '{"blackoutDate":"2016/05/03", "blackoutTime":"18:45:36"}' http://poweranalyzer-skyglover.rhcloud.com/blackouts/ 

然而,在我的java程序不工作:

String uri = "http://poweranalyzer-skyglover.rhcloud.com/blackouts/"; 
     URL url = new URL(uri); 
     StringBuffer params = new StringBuffer(""); 
     params.append("blackoutDate=" + URLEncoder.encode("2016/05/03", "UTF-8")); 
     params.append("blackoutTime=" + URLEncoder.encode("18:45:36", "UTF-8")); 

     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("POST"); 
     connection.setDoOutput(true); 
     connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
     connection.setRequestProperty("Content-Length", String.valueOf(params.toString().length())); 
     connection.connect(); 

     OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); 
     writer.write(params.toString()); 
     writer.flush(); 

     InputStream inputStream; 
     if (connection.getResponseCode() == 201) { 
      inputStream = connection.getInputStream(); 
     } else { 
      inputStream = connection.getErrorStream(); 
     } 

     // Get the response 
     BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream)); 
     String line; 
     while ((line = rd.readLine()) != null) 
     { 
      System.out.println("-----" + line); 
     } 
     writer.close(); 
     rd.close(); 

     connection.disconnect(); 

我越來越:

----- ----- 400錯誤請求 -----

錯誤的請求

-----

瀏覽器(或代理服務器)發送請求,表明此服務器共享我不明白。

回答

0

我的問題再次尋找後,我意識到,內容類型應該是應用/ JSON,我送我的參數可以改變一個JSON形式的方式:

String uri = "http://poweranalyzer-skyglover.rhcloud.com/blackouts/"; 
    URL url = new URL(uri); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setDoOutput(true); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Content-Type", "application/json"); 

    String input = "{\"blackoutDate\":\"2016/05/03\", \"blackoutTime\":\"18:45:36\"}"; 

    OutputStream os = conn.getOutputStream(); 
    os.write(input.getBytes()); 
    os.flush(); 

    if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { 
     throw new RuntimeException("Failed : HTTP error code : " 
       + conn.getResponseCode()); 
    } 

    BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream()))); 

    String output; 
    System.out.println("Output from Server .... \n"); 
    while ((output = br.readLine()) != null) { 
     System.out.println(output); 
    } 

    conn.disconnect(); 

這解決我的問題。

相關問題