2016-02-01 32 views
1

我想用GET方法發送HTTP請求,但我無法設置GET方法。 這裏是我的代碼:Android HttpURLConnection set GET請求方法

try { 
       URL url = new URL(path); 
       conn = (HttpURLConnection) url.openConnection(); 

       conn.setReadTimeout(10000); 
       conn.setConnectTimeout(15000); 
       conn.setRequestMethod("GET"); 
       conn.setDoInput(true); 
       conn.setDoOutput(true); 
Uri.Builder builder = new Uri.Builder() 
         .appendQueryParameter("p1", "123") 
         .appendQueryParameter("p2", "123"); 
       String query = builder.build().getEncodedQuery(); 
       OutputStream os = conn.getOutputStream(); 
       BufferedWriter writer = new BufferedWriter(
         new OutputStreamWriter(os, "UTF-8")); 
       writer.write(query); 
       writer.flush(); 
       writer.close(); 
       os.close(); 

       conn.connect(); 
       Log.e("ERROR", conn.getResponseMessage()); 
       Log.e("ERROR", conn.getRequestMethod()); 
       Log.e("ERROR", String.valueOf(conn.getResponseCode())); 

      } catch (Exception e) { 
       Log.e("ERROR", e.getMessage()); 
      } 

在代碼中,我設置GET方法,但在日誌中,請求方法是POST:

02-01 16:48:54.766 23799-23831/? E/ERROR﹕ Method Not Allowed 
02-01 16:48:54.766 23799-23831/? E/ERROR﹕ POST 
02-01 16:48:54.766 23799-23831/? E/ERROR﹕ 405 

什麼是問題?

+0

請出示你的'url'的後半部分 –

回答

7

問題是

conn.setDoOutput(true); 

設置爲true時請求方法變更爲POST,因爲GET或DELETE不能有一個請求主體

+1

是的,你是對的!它現在正在使用GET方法。謝謝! –

+0

不用客氣 – Blackbelt

+0

現在又出現了另一個問題。如果我刪除setDoOutput命令,GET數據正在發送。這就是說,方法不支持請求體:GET。我如何將數據綁定發送? –