Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
#1

Проверка соединения с сайтом через HttpUrlConnection - Android

19.05.2016, 20:37. Просмотров 236. Ответов 19
Метки нет (Все метки)

я нашла кучу информации, где после подключения что-либо выдает. Как написать программный код, чтоб выдавало только удалось подсоединиться или нет?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
19.05.2016, 21:06     Проверка соединения с сайтом через HttpUrlConnection #2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public boolean CheckHost(String host){
        HttpURLConnection connection;
        try {
            connection = (HttpURLConnection) new URL(host).openConnection();
            connection.setRequestProperty("Accept-Encoding", "");
            connection.setRequestMethod("HEAD");
            int responseCode = connection.getResponseCode();
            if (responseCode != 200) {
                return false;
            }
        } catch (Exception e) {
            return false;
        }
        return true;
    }
Я так делаю.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
19.05.2016, 21:25     Проверка соединения с сайтом через HttpUrlConnection #3
DarkVortex, чуть подчищу Ваш код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public boolean checkHost(String host) {
        HttpURLConnection connection = null;
        try {
            connection = (HttpURLConnection) new URL(host).openConnection();
            connection.setRequestProperty("Accept-Encoding", "");
            connection.setRequestMethod("HEAD");
            return connection.getResponseCode() == HttpURLConnection.HTTP_OK;
        } catch (Exception e) {
            return false;
        } finally {
            releaseResource(connection);
        }
    }
 
    private void releaseResource(HttpURLConnection connection) {
        if (connection != null) {
            connection.disconnect();
        }
    }
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
19.05.2016, 21:39     Проверка соединения с сайтом через HttpUrlConnection #4
YuraAAA, никогда не против) просто использовал для своего сервера и ответ 200 меня устраивал)
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
19.05.2016, 21:47     Проверка соединения с сайтом через HttpUrlConnection #5
DarkVortex, у Вас connection не был закрыт Да и лучше вместо "200" использовать константу
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
19.05.2016, 22:28     Проверка соединения с сайтом через HttpUrlConnection #6
YuraAAA, а чем 200 не константа?)
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
19.05.2016, 22:40  [ТС]     Проверка соединения с сайтом через HttpUrlConnection #7
YuraAAA, DarkVortex, Спасибо вам огромное, вы спасли меня)))
Hank
48 / 39 / 3
Регистрация: 28.12.2011
Сообщений: 225
19.05.2016, 22:56     Проверка соединения с сайтом через HttpUrlConnection #8
Цитата Сообщение от DarkVortex Посмотреть сообщение
а чем 200 не константа?)
а если завтра это значение будет не 200 (в данном контексте маловероятно)? будет все приложения править?
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
19.05.2016, 23:15  [ТС]     Проверка соединения с сайтом через HttpUrlConnection #9
YuraAAA, что-то у меня постоянно false вылетает...
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
19.05.2016, 23:36     Проверка соединения с сайтом через HttpUrlConnection #10
Nikandra94, покажите, как Вы его вызываете? Permission на INTERNET есть в манифесте?

Java
1
2
3
} catch (Exception e) {
      return false;
}
поменяйте на

Java
1
2
3
4
} catch (Exception e) {
      e.printStackTrace();
      return false;
}
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
19.05.2016, 23:39  [ТС]     Проверка соединения с сайтом через HttpUrlConnection #11
YuraAAA, так или что-то напутала?
k= CheckHost("https://www.google.ru");
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
19.05.2016, 23:43     Проверка соединения с сайтом через HttpUrlConnection #12
Hank, ну тогда видимо сломается весь интернет) в HttpURLConnection.HTTP_OK ведь никто ничего не поменяет

Добавлено через 1 минуту
Nikandra94, k= CheckHost("http://www.google.ru");
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
19.05.2016, 23:45     Проверка соединения с сайтом через HttpUrlConnection #13
Хм, не, должно быть нормально всё.
Bash
1
2
3
$ curl -X HEAD [url]https://www.google.ru[/url] -I -H 'Accept-Encoding:'
HTTP/1.1 200 OK
Date: Thu, 19 May 2016 20:43:28 GMT
Манифест покажите и добавьте e.printStackTrace() внутрь catch блока.

DarkVortex, использование готовых констант это правило хорошего тона Если другой программист посмотрит Ваш код, для него это, возможно, будет не очень понятно, что же такое это "200". А HTTP_OK более понятно
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
19.05.2016, 23:56  [ТС]     Проверка соединения с сайтом через HttpUrlConnection #14
вот,YuraAAA
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.remof">
    <uses-permission android:name="android.permission.INTERNET"/>
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Pro">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".result"
            android:label="@string/title_activity_result"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".anti"
            android:label="@string/title_activity_anti"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".notFireWall"
            android:label="@string/title_activity_not_fire_wall"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".notanti"
            android:label="@string/title_activity_notanti"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".Drugie"
            android:label="@string/title_activity_drugie"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".Branmayer"
            android:label="@string/title_activity_branmayer"
            android:theme="@style/AppTheme.NoActionBar"></activity>
    </application>
 
</manifest>
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.05.2016, 00:26     Проверка соединения с сайтом через HttpUrlConnection #15
Nikandra94, ещё раз
1. добавьте e.printStackTrace() перед return false;
2.
Цитата Сообщение от YuraAAA Посмотреть сообщение
return connection.getResponseCode() == HttpURLConnection.HTTP_OK;
меняйте на
Java
1
2
3
int code = connection.getResponseCode();
Log.d("HttpUrlConnection", "" + code);
return code == HttpURLConnection.HTTP_OK;
и запустите снова. Будут ли ошибки в трейсе, какой будет код в логах
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
20.05.2016, 00:53  [ТС]     Проверка соединения с сайтом через HttpUrlConnection #16
YuraAAA, это вызов этого метода
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: android.os.NetworkOnMainThreadException
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at java.net.InetAddress.getAllByName(InetAddress.java:214)
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at com.example.myapplication.MainActivity.CheckHost(MainActivity.java:53)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at com.example.myapplication.MainActivity$1.onClick(MainActivity.java:30)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.view.View.performClick(View.java:4204)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.view.View$PerformClick.run(View.java:17355)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.os.Handler.handleCallback(Handler.java:725)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.os.Handler.dispatchMessage(Handler.java:92)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.os.Looper.loop(Looper.java:137)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5069)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at java.lang.reflect.Method.invoke(Method.java:511)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at dalvik.system.NativeStart.main(Native Method)
Hank
48 / 39 / 3
Регистрация: 28.12.2011
Сообщений: 225
20.05.2016, 01:00     Проверка соединения с сайтом через HttpUrlConnection #17
странно, что сразу не указали эту причину - все действия с сетью не должны производиться в потоке пользовательского интерфейса.
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
20.05.2016, 01:03  [ТС]     Проверка соединения с сайтом через HttpUrlConnection #18
Hank, и что делать?
Hank
48 / 39 / 3
Регистрация: 28.12.2011
Сообщений: 225
20.05.2016, 01:10     Проверка соединения с сайтом через HttpUrlConnection #19
Нужно создать фоновый поток, например, так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
new AsyncTask<Void, Void, Boolean>() {
            @Override
            protected Boolean doInBackground(Void... params) {
                k= CheckHost("https://www.google.ru");
                return k;
            }
 
 
            @Override
            protected void onPostExecute(Boolean k) {
                super.onPostExecute(k);
//k - это результат
            }
        }.execute();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2016, 01:40     Проверка соединения с сайтом через HttpUrlConnection
Еще ссылки по теме:

Использование HttpURLConnection Android
Android HttpUrlConnection
HttpURLConnection запрос Android
HttpURLConnection cookie аутентификация Android
Проверка Socket на наличие соединения Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
20.05.2016, 01:40  [ТС]     Проверка соединения с сайтом через HttpUrlConnection #20
Hank, YuraAAA, Спасибо большое всем и что вы меня поняли и вытерпели, мой проект теперь полностью работает. Спасибо еще раз.
Yandex
Объявления
20.05.2016, 01:40     Проверка соединения с сайтом через HttpUrlConnection
Ответ Создать тему
Опции темы

Текущее время: 06:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru