2016-10-04 15 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 헤더 필드 설정하는 것이 중요 할 것 같다 당신의 작업 수행 (참고 : 안드로이드 5.1.1 장치 테스트).

일반적으로 jsoup를 사용하여 연결을 거부하는 경우 요청을 검사하고 (예 : Chrome 개발자 도구/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

이 코드는 작동하지 않습니다. 여기서 주된 문제는 서버가 페이지에 대한 액세스를 차단한다는 것입니다. 정상적인 자바 클래스에서 동일한 코드를 실행하면 모든 것이 작동합니다. – Grauen

+0

일반적인 Java 클래스 및 실행, 다음 그것을 차단하는 서버가 아닌 것 같아요. 그러나 당신은 뭔가 잘못하고 있습니다. –

+0

하지만 다른 사이트는 모두 잘 작동합니다. – Grauen

관련 문제