「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;
}
