2016-10-04 2 views
1

Проблема при попытке страницы в обычном классе java все работает нормально, но если это уже сделано в приложении для Android, ответ приходит: «у вас нет разрешения доступа»в то время как агент пользователя указан в андроида манифеста имеет разрешение на использование Интернета и все это в отдельном потоке, может кто-то сталкивался с этой проблемойНе удается получить страницу с помощью Jsoup

public void onClick(View view) 
{ 
    new Thread(new Runnable() { 
     @Override 
     public void run() 
     { 
      go(); 
     } 
    }).start(); 
} 
private void go() 
{ 

    try { 
     document = Jsoup.connect("http://issa.beltelecom.by/main.html").userAgent("Chrome 53.0.2785.143").ignoreHttpErrors(true).get(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

ли вы попробовать запустить его в фоновом режиме? –

+0

Да, конечно .. – Grauen

ответ

0

Это, как представляется, важно установить Accept поле заголовка (примечание: проверено на Android 5.1.1 устройство).

В целом: если соединение отклонено с помощью jsoup, проверьте запросы (например, используя вкладку сетей в инструментах chrome dev/F12) и добавьте отсутствующие поля заголовка.

Пример кода

String userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"; 
String url = "https://issa.beltelecom.by/main.html"; 
String acceptValue = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; 
String host = "issa.beltelecom.by"; 

document = Jsoup.connect(url).header("Accept",acceptValue).header("Host", host).userAgent(userAgent).get(); 
+0

спасибо, что я добавил Принять, и это сработало – Grauen

+0

@Grauen, пожалуйста, спасибо за отзыв. –

0

Вы можете попробовать это, установите OnClickListener для вызова фоновой задачи.

new MyAsyncTask().execute(); 

Затем выполнить ваша задача

private class MyAsyncTask extends AsyncTask<Void, Void, Boolean> { 

      protected void onPreExecute() { 
       super.onPreExecute(); 
       //do anything here 
      } 

      protected Boolean doInBackground(Void...param) { 

       Document document = null; 
       try { 
        document = Jsoup.connect(getString(R.string.your_url_string)).get(); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       if (document != null) { 
        Elements yourElements = document.select("#element_id"); 

        //Do anything here 
        return true; 
       } 
       //Document is null 
       return false; 
      } 

      protected void onPostExecute(Boolean result) { 
       if(result==true) { 
        // do this 
       } 
      } 
     } 
+0

это не работает, здесь основная проблема заключается в том, что сервер блокирует доступ к странице, хотя, если я запускаю тот же код в обычном классе Java, все работает – Grauen

+0

Если вы запустите код в обычной Java класс, и он запускается, тогда я думаю, что это не ваш сервер, который блокирует его. Но вы делаете что-то неправильно. –

+0

, но на других сайтах все работает нормально – Grauen

Смежные вопросы