2010-01-09 10 views
2

J'ai besoin d'aide pour trouver comment obtenir la redirection après avoir fait un post sur le serveur. D'abord, je dois faire un get pour obtenir des cookies du serveur. Ensuite, je réalise un post avec les cookies et les paramètres supplémentaires. Le serveur répond alors avec une redirection 302. Comment puis-je obtenir l'URL pour cette redirection?Obtenir l'URL de redirection avec Java org.apache.http.client

code

ressemble suit:

HttpGet get = new HttpGet(urlOne); 

try { 
    //Creating a local instance of cookie store. 
    CookieStore cookieJar = new BasicCookieStore(); 

    // Creating a local HTTP context 
    HttpContext localContext = new BasicHttpContext(); 

    // Bind custom cookie store to the local context 
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieJar); 

    HttpResponse response = httpClient.execute(get, localContext); 
    HttpEntity entity = response.getEntity(); 

    System.out.println("------------------GET----------------------"); 
    System.out.println(response.getStatusLine()); 
    if (entity != null) { 
     System.out.println("Response content length: " + entity.getContentLength()); 
    } 

    // Print out cookies obtained from server 
    List<Cookie> cookies = cookieJar.getCookies(); 
    for (int i = 0; i < cookies.size(); i++) { 
     System.out.println("Local cookie: " + cookies.get(i)); 
    }   

    if (entity != null) { 
     entity.consumeContent(); 
    } 
    System.out.println("------------------GET-END---------------------"); 

    // Create a new post 
    HttpPost post = new HttpPost(urlTwo); 
    post.setHeader("Content-Type", "application/x-www-form-urlencoded"); 

    // Add params 
    HttpParams params = new BasicHttpParams(); 
    params.setParameter("action", "search"); 
    params.setParameter("word", "hello"); 

    post.setParams(params); 

    //Execute 
    HttpResponse response2 = httpClient.execute(post, localContext); 
+0

Est-ce HttpClient 3 ou 4? – skaffman

+0

Celui utilisé dans Android. Je ne suis pas sûr de quelle version. – jakob

Répondre

1

Je suppose que vous voulez automatiser les opérations du navigateur et maintenir la session afin que vous puissiez également accéder à ces pages qui nécessitent une maintenance de la session.

Je ne sais pas comment à travers l'API org.apache.http.client. Si vous n'êtes pas limité à utiliser l'API org.apache.http.client et pouvez utiliser d'autres API, vous pouvez utiliser l'API HtmlUnit sinon vous pouvez ignorer le reste de la réponse.

sessions et maintien l'automatisation des opérations du navigateur via HtmlUnit peut se faire comme suit:

import com.gargoylesoftware.htmlunit.*; 
import com.gargoylesoftware.htmlunit.html.*; 

final WebClient webClient = new WebClient(); 
    try { 
     webClient.setJavaScriptEnabled(true); 
     webClient.setThrowExceptionOnScriptError(false); 
     webClient.setCssEnabled(true); 
     webClient.setUseInsecureSSL(true); 
     webClient.setRedirectEnabled(true); 

     HtmlPage loginPage = webClient.getPage(new URL("https://www.orkut.com/")); 
     System.out.println(loginPage.getTitleText()); 
     List<HtmlForm> forms = loginPage.getForms(); 
     HtmlForm loginForm = forms.get(0); 
     HtmlTextInput username = loginForm.getInputByName("Email"); 
     HtmlPasswordInput password = loginForm.getInputByName("Passwd"); 
     HtmlInput submit = loginForm.getInputByName("signIn"); 
     username.setValueAttribute("username"); 
     password.setValueAttribute("password"); 
     HtmlPage homePage = submit.click();. 
     Thread.sleep(10 * 1000); 
     HtmlPage homePageFrame = (HtmlPage) homePage.getFrameByName("orkutFrame").getEnclosedPage(); 
     HtmlPage communitiesTestPage = (HtmlPage) webClient.openWindow(new URL("http://www.orkut.co.in/Main#Community?cmm=1"), "CommunitiesWindow").getEnclosedPage(); 
    }catch(java.security.GeneralSecurityException e) { 
     e.printStackTrace(); 
    }catch(java.io.IOException e) { 
     e.printStackTrace(); 
    }catch(InterruptedException e) { 
     e.printStackTrace(); 
    } 

    WebWindow ww = webClient.getWebWindowByName("CommunitiesWindow"); 
    WebRequestSettings wrs1 = new WebRequestSettings(URL); // URL is the url that requires authentication first 

Comme vous pouvez voir que la façon dont les opérations de navigateur Automatiser de code ci-dessus et comment il maintient automatiquement la session. Nous ne devons gérer les cookies ou URLReDirect manuellement ...

+0

Salut, merci mais j'ai besoin d'utiliser cette bibliothèque. – jakob

1

Il y a une façon simple, je suis venu à propos de Java. Voici les étapes:

  1. Créez la connexion HttpUrl.
  2. Définir HttpURLConnection.setFollowRedirects(true); // cela devrait être vrai par défaut
  3. Appelez connect sur votre objet HttpUrlConnection;
  4. Après connexion, appelez le getHeadersFields() sur votre objet HttpUrlConnection;
  5. Obtenez l'URL redirigée en appelant le getUrl() par-dessus l'objet HttpUrlConnection ci-dessus;

Il existe également une autre façon de l'obtenir à l'aide du champ Emplacement dans les en-têtes HTTP, mais parfois, le champ Emplacement ne figure pas dans les en-têtes. Cela n'a pas fonctionné pour moi au moins. Mais la méthode ci-dessus, cela fonctionne à coup sûr.