「Android/HttpRequest通信/DefaultHttpClient/サンプル」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→import org.apache.httpがインポートできないとき) |
|||
(同じ利用者による、間の2版が非表示) | |||
行1: | 行1: | ||
+ | ==DefaultHttpClientについて== | ||
+ | 2018年現在、DefaultHttpClientは古いので、HttpURLConnectionを使いましょう。 | ||
+ | |||
==HTTP通信サンプル== | ==HTTP通信サンプル== | ||
httpsも可能なように作成 | httpsも可能なように作成 |
2019年5月15日 (水) 19:01時点における最新版
DefaultHttpClientについて
2018年現在、DefaultHttpClientは古いので、HttpURLConnectionを使いましょう。
HTTP通信サンプル
httpsも可能なように作成
- AndroidManifest.xml
以下追加
<uses-permission android:name="android.permission.INTERNET" />
- SpHttpRequest.java
package info.nonip.android.entity; import android.os.Build; import android.util.Log; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.util.EntityUtils; import org.apache.http.conn.ssl.SSLSocketFactory; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.UnknownHostException; import java.util.ArrayList; /** * スマホHttpRequest通信クラス * * @ex * SpHttpRequest http = new SpHttpRequest("http://www.google.com/"); * http.setMethod(SpHttpRequest.METHOD_POST); * http.addParam("hoge", "piyo"); * String response = http.exec(); * 必須:<uses-permission android:name="android.permission.INTERNET" /> */ public class SpHttpRequest { public static int METHOD_GET = 0; public static int METHOD_POST = 1; // URL private String mUrl = "http://example.com/"; // メソッド private int mMethod = METHOD_GET; // パラメータを生成 private ArrayList<NameValuePair> mParams = new ArrayList<NameValuePair>(); // 文字コード private String mCharset = "UTF-8"; // ua private String mUserAgent = "Mozilla/5.0 (Linux; U; Android 2.3.3; ja-jp"; // ステータスコード private int mStatusCode; // construct public SpHttpRequest(String url) { mUrl = url; mUserAgent = "Mozilla/5.0 (Linux; U; Android " + Build.VERSION.RELEASE + "; ja-jp; " + Build.MODEL + " Build/A30"; } // メソッド設定 public void setMethod(int method) { mMethod = method; } // 文字コード設定 public void setCharset(String charset) { mCharset = charset; } // UserAgent設定 public void setUserAgent(String ua) { mUserAgent = ua; } // パラメータ追加 public void addParam(String key, String value) { Log.d("SpHttpRequest", "addParam " + key + "=" + value); mParams.add(new BasicNameValuePair(key, value)); } // リクエスト処理実行 public String exec() { if (mMethod == METHOD_POST) { return execPost(); } else { return execGet(); } } // リクエストGET private String execGet() { Log.d("SpHttpRequest", "methode=get"); String queries = URLEncodedUtils.format(mParams, mCharset); String url = mUrl; if (queries != "") { url += "?" + queries; } Log.d("SpHttpRequest", "url=" + url); HttpGet httpGet = new HttpGet(url); return execRequest(httpGet); } // リクエストPOST private String execPost() { Log.d("SpHttpRequest", "methode=post"); Log.d("SpHttpRequest", "url=" + mUrl); try { HttpPost httpPost = new HttpPost(mUrl); // パラメータを設定 httpPost.setEntity(new UrlEncodedFormEntity(mParams, mCharset)); return execRequest(httpPost); } catch (UnsupportedEncodingException e) { return null; } } // HttpsClientインスタンス取得 private DefaultHttpClient getHttpsClient() { // http登録 SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); // https登録 SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory(); schemeRegistry.register(new Scheme("https", sslSocketFactory, 443)); // httpパラメータ登録 HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, mCharset); // Clientロード DefaultHttpClient httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(params, schemeRegistry), params); return httpClient; } // リクエストコア処理 private String execRequest(HttpRequestBase http) { try { // HttpClientロード DefaultHttpClient httpClient = new DefaultHttpClient(); // httpsの時 if (mUrl.matches("https")) { Log.d("SpHttpRequest", "https"); // HttpsClientインスタンス取得 httpClient = getHttpsClient(); } // UserAgent設定 httpClient.getParams().setParameter("http.useragent", mUserAgent); Log.d("SpHttpRequest", "useragent=" + mUserAgent); // リクエスト実行 HttpResponse httpResponse = httpClient.execute(http); // ステータスコードを取得 mStatusCode = httpResponse.getStatusLine().getStatusCode(); Log.d("SpHttpRequest", "statusCode=" + mStatusCode); // レスポンスを取得 HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity); // リソースを解放 entity.consumeContent(); // クライアントを終了させる httpClient.getConnectionManager().shutdown(); Log.d("SpHttpRequest", "response=" + response); return response; } catch (ClientProtocolException e) { Log.e("SpHttpRequest", "ClientProtocolException=" + e.getMessage()); throw new RuntimeException(e); // HOST不明エラー,AndroidManifestにInternetを追加しているか確認 } catch (UnknownHostException e) { Log.e("SpHttpRequest", "UnknownHostException=" + e.getMessage()); throw new RuntimeException(e); } catch (IOException e) { Log.e("SpHttpRequest", "IOException=" + e.getMessage()); throw new RuntimeException(e); } catch (Exception e) { Log.e("SpHttpRequest", "Exception=" + e.getMessage()); return null; } } // ステータスコード取得 public int getStatusCode() { return mStatusCode; } }
import org.apache.httpがインポートできないとき
以下のjarをプロジェクトのlibsへ追加する
Android/Sdk/platforms/android-23/optional/org.apache.http.legacy.jar
gradleだと
dependencies { implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.1' }