2012-06-06 2 views
4

웹 사이트에 로그인해야하는 앱을 만들고 있습니다. 이렇게하려면 HttpClient를 만들고 URL에 HttpPost를 수행하십시오. 이것은 내가 아는 한 일하고있다. StatusCodes는 200을 반환합니다.이 후 (동일한 클라이언트로) 제한된 URL에 대해 HttpGet을 수행합니다. 그러나 나는 항상 LogCat에서 금지 된 예외 또는 로그인 화면을 되 돌린다. 웹 검색에서 나는 HttpPost 전에 사이트에 HttpGet을 먼저 수행하고 CookieStore를 첨부해야 할 때가 있다는 것을 발견했다. 둘 다 완료하고 아직도 succes .. 이걸로 나를 도울 수있는 누군가?웹 사이트에 로그인

06-06 13:38:47.033: I/LogTag (27839): StatusCode HttpGet: 200 
    06-06 13:38:47.197: I/LogTag (27839): StatusCode HttpPost: 200 
    06-06 13:38:47.361: W/System.err(27839): org.apache.http.client.HttpResponseException: Forbidden 
    06-06 13:38:47.377: W/System.err(27839): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71) 
    06-06 13:38:47.384: W/System.err(27839): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59) 
    06-06 13:38:47.384: W/System.err(27839): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657) 
    06-06 13:38:47.384: W/System.err(27839): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627) 
    06-06 13:38:47.384: W/System.err(27839): at com.dakro.wiebetaaltwat.MainActivity$AsyncPost.doInBackground(MainActivity.java:136) 
    06-06 13:38:47.384: W/System.err(27839): at com.dakro.wiebetaaltwat.MainActivity$AsyncPost.doInBackground(MainActivity.java:1) 
    06-06 13:38:47.392: W/System.err(27839): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
    06-06 13:38:47.392: W/System.err(27839): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
    06-06 13:38:47.392: W/System.err(27839): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    06-06 13:38:47.392: W/System.err(27839): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
    06-06 13:38:47.392: W/System.err(27839): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
    06-06 13:38:47.400: W/System.err(27839): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
    06-06 13:38:47.400: W/System.err(27839): at java.lang.Thread.run(Thread.java:856) 
+0

http://www.checkupdown.com/status/E403.html –

답변

1

달콤한 succes에 사용할 수 있습니다! URL에 POST하고 200 StatusCode를 돌려받을 수도 있지만 "완전한"URL은 아닙니다. index.php를 추가해야했습니다. 또한 양식 데이터가 완전하지 않습니다. 매개 변수를 두 개 더 추가해야했습니다.

   params.add(new BasicNameValuePair("action", "login")); 
       params.add(new BasicNameValuePair("login_submit", "Inloggen")); 

사이트에 게시 된 양식 데이터를 검사하여이 사실을 알 수 있습니다. Chrome의 개발자 도구 (네트워크 탭)에서 빌드를 사용했습니다. 답변 주셔서 감사합니다!

+0

내가 우편 배달부를 사용하고 http://wiebetaaltwat.nl/index.php와 같은 양식 데이터와 함께 POST 요청을 실행하려고하면 chrome 네트워크 탭은 실제로 로그인하는 대신 기본 환영 페이지로 항상 링크됩니다. 어떻게 수정 했습니까? – Emptyless

1

금단의 오류는 일반적으로 웹 서버에 액세스하는 디렉토리/파일 권한 문제를 나타냅니다

 HttpClient client = new DefaultHttpClient(); 

     HttpGet initiate = new HttpGet(url);    
     HttpPost post = new HttpPost(url); 
     HttpGet page = new HttpGet(restrictedurl); 
     HttpContext localContext = new BasicHttpContext(); 

     CookieStore cookieStore = new BasicCookieStore(); 
     localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 

      try { 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("username", username)); 
       params.add(new BasicNameValuePair("password", password)); 

       post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 

       HttpResponse response = client.execute(initiate, localContext); 
       Log.i(Tag, " " + response.getStatusLine().getStatusCode()); 
       response.getEntity().consumeContent(); 

       response = client.execute(post, localContext); 
       Log.i(Tag, " " + response.getStatusLine().getStatusCode());    
       response.getEntity().consumeContent();          

       ResponseHandler<String> handler = new BasicResponseHandler(); 
       String htmlpage = client.execute(page, handler, localContext); 
       Log.i(Tag, " " + response.getStatusLine().getStatusCode()); 
       Log.i(Tag, htmlpage); 
       response.getEntity().consumeContent(); 

      } catch (UnsupportedEncodingException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 

여기 내 로그 캣입니다.

소유자 및 그룹 권한을 확인하십시오. 또한 파일의 쓰기/읽기/실행 플래그를 점검하십시오.

웹 브라우저를 통해 URL로 직접 이동하여 금지 된 메시지가 표시되는지 확인할 수 있습니까?

+0

브라우저에 로그인했을 때 URL로 직접 이동할 수 있습니다. 내가 로그인하지 않았다면 먼저 로그인해야한다는 거품이있는 대체 로그인 페이지가 표시됩니다. HttpGet의 URL을 기본 페이지로 다시 변경하면 (브라우저의 로그인 페이지로 안내 할 것입니다) 로그 아웃 된 기본 페이지가 다시 표시됩니다. 그래서 그것은 내가 응용 프로그램을 통해 로그인 또는 뭔가를 유지할 수없는 것 같습니다. – Dave992

1

이 조건

StatusLine statusLine = response.getStatusLine(); 
       int statusCode = statusLine.getStatusCode(); 
       if (statusCode == 200) { 

       } else { 

       }