サーチ…


備考

  • AndroidでHttpUrlConnectionを使用するには、 AndroidManifest.xml内のアプリにインターネットアクセス許可を追加する必要があります。

  • SquareのOkHttpなど、他のJava HTTPクライアントとライブラリも使いやすく、より優れたパフォーマンスや機能を提供することができます。

レスポンス本文をURLからStringとして取得する

String getText(String url) throws IOException {
    HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
    //add headers to the connection, or check the status if desired..
    
    // handle error response code it occurs
    int responseCode = conn.getResponseCode();
    InputStream inputStream;
    if (200 <= responseCode && responseCode <= 299) {
        inputStream = connection.getInputStream();
    } else {
        inputStream = connection.getErrorStream();
    }

    BufferedReader in = new BufferedReader(
        new InputStreamReader(
            inputStream));

    StringBuilder response = new StringBuilder();
    String currentLine;

    while ((currentLine = in.readLine()) != null) 
        response.append(currentLine);

    in.close();

    return response.toString();
}

これにより、指定されたURLからテキストデータがダウンロードされ、Stringとして返されます。

この仕組み:

  • まず、 new URL(url).openConnection()を使用して、URLからHttpUrlConnectionを作成します。 UrlConnectionをキャストしてUrlConnection返すので、ヘッダー(User Agentなど)の追加やレスポンスコードの確認などのHttpUrlConnectionにアクセスできます。 (この例ではそうしませんが、追加は簡単です)。

  • 次に、レスポンスコードに基づいてInputStream作成します(エラー処理用)

  • 次に、接続から取得したInputStreamからテキストを読み取ることができるBufferedReaderを作成します。

  • 今度は、テキストを行StringBuilder追加します。

  • InputStream閉じ、現在持っている文字列を返します。

ノート:

  • このメソッドは、障害(ネットワークエラーやインターネット接続など)が発生した場合にIoExceptionをスローし、 IoExceptionされたURLが有効でない場合はチェックされていない MalformedUrlExceptionもスローします。

  • これは、Webページ(HTML)、JSONやXMLを返すREST APIなど、テキストを返す任意のURLから読み取るために使用できます。

  • 関連項目: 数行のJavaコードでURLをStringに読み込みます

使用法:

非常に簡単です:

String text = getText(”http://example.com");
//Do something with the text from example.com, in this case the HTML.

POSTデータ

public static void post(String url, byte [] data, String contentType) throws IOException {
    HttpURLConnection connection = null;
    OutputStream out = null;
    InputStream in = null;

    try {
        connection = (HttpURLConnection) new URL(url).openConnection();
        connection.setRequestProperty("Content-Type", contentType);
        connection.setDoOutput(true);

        out = connection.getOutputStream();
        out.write(data);
        out.close();

        in = connection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        in.close();

    } finally {
        if (connection != null) connection.disconnect();
        if (out != null) out.close();
        if (in != null) in.close();
    }
}

これにより、指定されたURLにPOSTデータが送信され、応答が1行ずつ読み込まれます。

使い方

  • 通常どおり、 URLからHttpURLConnectionを取得しURL
  • setRequestPropertyを使用してコンテンツタイプを設定しsetRequestProperty 。デフォルトではapplication/x-www-form-urlencoded
  • setDoOutput(true)は、データを送信することを接続に通知します。
  • 次に、 getOutputStream()を呼び出してOutputStreamを取得し、それにデータを書き込みます。完了後にそれを閉じることを忘れないでください。
  • 最後に、サーバーの応答を読みました。

リソースを削除する

   public static void delete (String urlString, String contentType) throws IOException {
        HttpURLConnection connection = null;
    
        try {
            URL url = new URL(urlString);
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.setRequestMethod("DELETE");
            connection.setRequestProperty("Content-Type", contentType);
    
            Map<String, List<String>> map = connection.getHeaderFields();
            StringBuilder sb = new StringBuilder();
            Iterator<Map.Entry<String, String>> iterator = responseHeader.entrySet().iterator();
            while(iterator.hasNext())
            {
                Map.Entry<String, String> entry = iterator.next();
                sb.append(entry.getKey());
                sb.append('=').append('"');
                sb.append(entry.getValue());
                sb.append('"');
                if(iterator.hasNext())
                {
                    sb.append(',').append(' ');
                }
            }
            System.out.println(sb.toString());
    
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) connection.disconnect();
        }
    }

これにより、指定されたURLのリソースが削除され、レスポンスヘッダーが出力されます。

使い方

  • URLからHttpURLConnectionを取得しURL
  • setRequestPropertyを使用してコンテンツタイプを設定しsetRequestProperty 。デフォルトではapplication/x-www-form-urlencoded
  • setDoInput(true)は、入力にURL接続を使用することを接続に指示します。
  • HTTP DELETEを実行するためのsetRequestMethod("DELETE")

最後に、サーバーレスポンスヘッダーを出力します。

リソースが存在するかどうかを確認する

/**
 * Checks if a resource exists by sending a HEAD-Request.
 * @param url The url of a resource which has to be checked.
 * @return true if the response code is 200 OK.
 */
public static final boolean checkIfResourceExists(URL url) throws IOException {
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("HEAD");
    int code = conn.getResponseCode();
    conn.disconnect();
    return code == 200;
}

説明:

リソースが存在するかどうかだけを確認している場合は、GETよりもHEADリクエストを使用する方がよいでしょう。これにより、リソースを転送するオーバーヘッドが回避されます。

レスポンスコードが200場合にのみ、このメソッドはtrue返しtrue 。リダイレクト(つまり3XX)の応答を期待している場合、そのメソッドを拡張する必要があります。

例:

checkIfResourceExists(new URL("http://images.google.com/")); // true
checkIfResourceExists(new URL("http://pictures.google.com/")); // false


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow