「Android/HttpRequest通信/HttpURLConnection」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→サンプル) |
|||
| 行6: | 行6: | ||
同期処理のみ(AsyncTaskなどで実行すること) | 同期処理のみ(AsyncTaskなどで実行すること) | ||
CustomHttpURLConnection http = new CustomHttpURLConnection(); | CustomHttpURLConnection http = new CustomHttpURLConnection(); | ||
| − | http. | + | http.execGet("https://api.github.com/feeds"); |
<pre> | <pre> | ||
| 行20: | 行20: | ||
class CustomHttpURLConnection | class CustomHttpURLConnection | ||
{ | { | ||
| − | public void | + | public void execGet(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"); | // 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")); | Log.i("HttpURLConnection", "ua=" + System.getProperty("http.agent")); | ||
2018年12月14日 (金) 14:06時点における版
準備
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
サンプル
同期処理のみ(AsyncTaskなどで実行すること) CustomHttpURLConnection http = new CustomHttpURLConnection(); http.execGet("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 execGet(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;
}
