2012-06-06 4 views
4

Je fais une application qui doit se connecter à un site Web. Pour ce faire, je crée un HttpClient et exécute un HttpPost à l'url. Cela fonctionne pour autant que je sache. Les StatusCodes donnent 200. Après cela, j'effectue un HttpGet à l'URL restreinte (avec le même client). Cependant, je récupère toujours une exception interdite ou l'écran de connexion dans mon LogCat. De la recherche sur le web, j'ai trouvé qu'il est parfois nécessaire d'effectuer d'abord un HttpGet sur le site avant le HttpPost, et aussi d'attacher un CookieStore. Fait à la fois et toujours pas de succès .. Quelqu'un ici qui peut m'aider avec cela?Connexion au site Web

 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(); 

Voici mon LogCat:

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 –

Répondre

1

Doux succès! Bien que je puisse POST à ​​l'URL et obtenir un 200 StatusCode de retour ce n'était pas l'url "complète". Je devais y ajouter index.php. De plus, les données de formulaire n'étaient pas complètes. Nécessaire d'ajouter deux autres paramètres.

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

Nous avons découvert cela en consultant le site Web pour les données de formulaire qu'il a affichées sur le site. Utilisé la version dans Outils de développement de Chrome (onglet Réseau). Merci pour les réponses!

+0

Lorsque j'utilise postier et essayer d'exécuter une requête POST à ​​http://wiebetaaltwat.nl/index.php avec des données de formulaire comme dans le L'onglet réseau chrome renvoie toujours à la page d'accueil par défaut au lieu de se connecter. Comment avez-vous résolu cela? – Emptyless

1

L'erreur interdite indique normalement un problème d'autorisations sur le répertoire/fichier que vous accédez sur le serveur Web.

Vérifiez les autorisations du propriétaire et du groupe. Vérifiez également les indicateurs write/read/execute sur le fichier.

Pouvez-vous naviguer directement vers l'url via un navigateur Web et voir s'il affiche également un message interdit?

+0

Je peux naviguer directement vers l'URL lorsque je suis connecté, dans un navigateur. Si je ne suis pas connecté, il affiche une autre page de connexion avec une bulle indiquant que je dois d'abord me connecter. Si je change à nouveau l'URL dans le HttpGet à la page principale (qui me guidera vers une page connectée sur mon navigateur), elle restitue la page principale dans un paramètre déconnecté. Donc, il semble que je ne suis pas capable de rester connecté ou quelque chose grâce à l'application .. – Dave992

1

vous pouvez utiliser cette condition

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

       } else { 

       }