1. 程式人生 > >設定connection.setRequestMenthod(“GET”)不生效

設定connection.setRequestMenthod(“GET”)不生效

背景介紹:想要訪問開放的獲取天氣資訊的介面,該介面的請求方式是GET型別的,故程式碼中做了如下設定:

public HttpURLConnection getConnection(String url){
        HttpURLConnection connection = null;
        try {
            // 開啟和URL之間的連線
            URL postUrl = new URL(url);
            connection = (HttpURLConnection) postUrl.openConnection();
            // 設定通用的請求屬性
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("GET");
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setRequestProperty("Charset", "utf-8");
            connection.setRequestProperty("Accept-Charset", "utf-8");
			DataOutputStream out = null;
            // 建立實際的連線
            connection.connect();
            out = new DataOutputStream(connection.getOutputStream());
            out.flush();
            out.close();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            while ((line = reader.readLine()) != null) {
                httpResults = httpResults + line.toString();
            }
            reader.close();
            // 斷開連線
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

http介面狀態405表示:(方法禁用) 禁用請求中指定的方法。於是猜想我程式碼中是雖設定了請求方式為:get,但是否這一設定成功生效了呢?於是通過debug模式調式程式碼,發現後臺正真的處理方式其實還是post。那麼,系統報405的錯誤就顯得很正常了。

那麼為何,我設定了connection.setRequestMethod("GET");卻未生效呢?通過仔細讀程式碼,發現這段程式碼並沒有實際的用處,於是嘗試將其註釋了,然後再執行我的測試用例,發現成功的返回介面資料。

out = new DataOutputStream(connection.getOutputStream());

out.flush();

out.close();

通過一波百度,原來DataOutputStream out = new DataOutputStream(connection.getOutputStream());

執行這句會自動把介面的請求型別設定為POST, 因為只有POST方法才能傳送 “附加資料” 也就是你要傳送的JSON字串。

GET方法不能傳送“附加資料”,所有的資料必須方法請求地址的URL中(不理解這句話,可以瞭解一下get請求和post請求的區別)。