「Android/HttpRequest通信/HttpURLConnection」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→ua参考コード) |
(→サンプル) |
||
行5: | 行5: | ||
==サンプル== | ==サンプル== | ||
同期処理のみ(AsyncTaskなどで実行すること) | 同期処理のみ(AsyncTaskなどで実行すること) | ||
− | + | CustomHttpURLConnection http = new CustomHttpURLConnection(); | |
− | + | http.request("https://api.github.com/feeds"); | |
− | + | ||
− | + | <pre> | |
− | + | import java.io.BufferedReader; | |
− | + | import java.io.IOException; | |
− | + | import java.io.InputStream; | |
− | + | import java.io.InputStreamReader; | |
− | + | import java.net.HttpURLConnection; | |
− | + | import java.net.SocketTimeoutException; | |
− | + | import java.net.URL; | |
− | + | import android.util.Log; | |
− | + | ||
− | + | class CustomHttpURLConnection | |
− | + | { | |
− | + | public void request(String strGetUrl) { | |
− | + | // System.setProperty("http.agent", "Dalvik/2.1.0 (Linux; U; Android 9; H8216 Build/PDP-PKQ1.180708.001-10229)"); // System.getProperty("http.agent"); | |
− | + | Log.i("HttpURLConnection", "ua=" + System.getProperty("http.agent")); | |
− | + | HttpURLConnection urlConn = null; | |
− | + | InputStream in = null; | |
− | + | BufferedReader reader = null; | |
− | + | try { | |
− | + | URL url = new URL(strGetUrl); | |
− | + | urlConn = (HttpURLConnection) url.openConnection(); | |
− | + | urlConn.addRequestProperty("Content-Type", "application/json; charset=UTF-8"); | |
− | + | urlConn.setRequestMethod("GET"); | |
− | + | // urlConn.setRequestMethod("POST"); | |
− | + | urlConn.setConnectTimeout(10000); // 10s | |
− | + | urlConn.setReadTimeout(1000); // 1s | |
− | + | urlConn.connect(); | |
− | + | int status = urlConn.getResponseCode(); | |
− | + | Log.i("HttpURLConnection", "status_code=" + status); | |
− | + | if (status == HttpURLConnection.HTTP_OK) { | |
− | + | in = urlConn.getInputStream(); | |
− | + | reader = new BufferedReader(new InputStreamReader(in)); | |
− | + | StringBuilder output = new StringBuilder(); | |
− | + | String line; | |
− | + | while ((line = reader.readLine()) != null) { | |
− | + | output.append(line); | |
− | + | } | |
− | + | Log.i("HttpURLConnection", "res=" + output.toString()); | |
− | + | } | |
− | + | } catch (SocketTimeoutException e) { | |
− | + | e.printStackTrace(); | |
− | + | } catch (IOException e) { | |
− | + | e.printStackTrace(); | |
− | + | } finally { | |
− | + | try { | |
− | + | if (reader != null) { | |
− | + | reader.close(); | |
+ | } | ||
+ | if (urlConn != null) { | ||
+ | urlConn.disconnect(); | ||
+ | } | ||
+ | } catch (IOException e) { | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
uaはサーバに接続して変更設定されていることを確認済み。 | uaはサーバに接続して変更設定されていることを確認済み。 |
2018年12月14日 (金) 14:05時点における版
準備
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
サンプル
同期処理のみ(AsyncTaskなどで実行すること) CustomHttpURLConnection http = new CustomHttpURLConnection(); http.request("https://api.github.com/feeds");
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.SocketTimeoutException; import java.net.URL; import android.util.Log; class CustomHttpURLConnection { public void request(String strGetUrl) { // System.setProperty("http.agent", "Dalvik/2.1.0 (Linux; U; Android 9; H8216 Build/PDP-PKQ1.180708.001-10229)"); // System.getProperty("http.agent"); Log.i("HttpURLConnection", "ua=" + System.getProperty("http.agent")); HttpURLConnection urlConn = null; InputStream in = null; BufferedReader reader = null; try { URL url = new URL(strGetUrl); urlConn = (HttpURLConnection) url.openConnection(); urlConn.addRequestProperty("Content-Type", "application/json; charset=UTF-8"); urlConn.setRequestMethod("GET"); // urlConn.setRequestMethod("POST"); urlConn.setConnectTimeout(10000); // 10s urlConn.setReadTimeout(1000); // 1s urlConn.connect(); int status = urlConn.getResponseCode(); Log.i("HttpURLConnection", "status_code=" + status); if (status == HttpURLConnection.HTTP_OK) { in = urlConn.getInputStream(); reader = new BufferedReader(new InputStreamReader(in)); StringBuilder output = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { output.append(line); } Log.i("HttpURLConnection", "res=" + output.toString()); } } catch (SocketTimeoutException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } if (urlConn != null) { urlConn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } } }
uaはサーバに接続して変更設定されていることを確認済み。
ドメイン接続許可しないエラーが出るときはこちらを確認
android/開発環境/Android8 [ショートカット]
参考
https://itsakura.com/java-httpurlconnection
http://d.hatena.ne.jp/Kazuhira/20131026/1382796711
uaを設定しない場合とwebviewからもてっくる場合
HttpURLConnectionのuaデフォ(System.getProperty("http.agent");)
Dalvik/2.1.0 (Linux; U; Android 9; Pixel 2 XL Build/PPR2.181005.003)
webviewのua android/webview/useragent [ショートカット]
Mozilla/5.0 (Linux; Android 9; Pixel 2 XL Build/PPR2.181005.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.110 Mobile Safari/537.36
retry処理
本来のget処理をexecGetCore()に入れる
public boolean execGet() throws Exception { Exception tmpException = null; for (int retry = 0; retry <= mRetry; retry++) { try { boolean ret = execGetCore(); if (ret) { return ret; } } catch (Exception e) { tmpException = e; } } if (Exception != null) { throw tmpException; } return false; }