En fonction du formulaire d'Authentification à l'aide de HttpClient - j_security_check

J'essaie d'authentifier moi-même un site web qui emploie la forme d'authentification (par exemple, facebook.com) à l'aide de l'Apache HttpClient bibliothèque Java.

En utilisant le présent site web du programme comme principal exemple: http://www.elitejavacoder.com/2013/10/http-client-form-based-authentication.html, j'ai été en mesure de le faire - mais il y a quelques choses que je ne comprends pas à propos de ce programme. Voici le code:

package com.elitejavacoder.http.client;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class HttpClientFormAuthentication {
public static void main(String[] agrs) {
String host = "yourhostname.com";
int port = 8080;
String protocol = "http";
DefaultHttpClient client = new DefaultHttpClient();
try {
HttpHost httpHost = new HttpHost(host, port, protocol);
client.getParams().setParameter(ClientPNames.DEFAULT_HOST, httpHost);
HttpGet securedResource = new HttpGet("/secured/index.jsp");            
HttpResponse httpResponse = client.execute(securedResource);
HttpEntity responseEntity = httpResponse.getEntity();
String strResponse = EntityUtils.toString(responseEntity);
int statusCode = httpResponse.getStatusLine().getStatusCode();
EntityUtils.consume(responseEntity);
System.out.println("Http status code for Unauthenticated Request: " + statusCode);//Statue code should be 200
System.out.println("Response for Unauthenticated Request: \n" + strResponse); //Should be login page
System.out.println("================================================================\n");
HttpPost authpost = new HttpPost("/j_security_check");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("j_username", "yourusername"));
nameValuePairs.add(new BasicNameValuePair("j_password", "yourpassword"));
authpost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpResponse = client.execute(authpost);
responseEntity = httpResponse.getEntity();
strResponse = EntityUtils.toString(responseEntity);
statusCode = httpResponse.getStatusLine().getStatusCode();
EntityUtils.consume(responseEntity);
System.out.println("Http status code for Authenticattion Request: " + statusCode);//Status code should be 302
System.out.println("Response for Authenticattion Request: \n" + strResponse); //Should be blank string
System.out.println("================================================================\n");
httpResponse = client.execute(securedResource);
responseEntity = httpResponse.getEntity();
strResponse = EntityUtils.toString(responseEntity);
statusCode = httpResponse.getStatusLine().getStatusCode();
EntityUtils.consume(responseEntity);
System.out.println("Http status code for Authenticated Request: " + statusCode);//Status code should be 200
System.out.println("Response for Authenticated Request: \n" + strResponse);//Should be actual page
System.out.println("================================================================\n");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}

J'ai les questions suivantes (les numéros de ligne, je vais me référer à sont dans le contexte du lien que j'ai fourni ci-dessus, depuis StackOverflow ne permettent pas d'inclure les numéros de ligne):

  • Ce qui est exactement "/j_security_check" (ligne 41)? Et comment l'auteur savait qu'il devait utiliser "j_security_check" au lieu du nom de la ressource sécurisée?

  • Comment se fait que la chaîne "strResponse = EntityUtils.toString(responseEntity);" (ligne 49), ce qui est deux lignes après "httpResponse = client.execute(authpost);" (ligne 47), est différente de la chaîne "strResponse = EntityUtils.toString(responseEntity);" (ligne 59), qui est de deux lignes après "httpResponse = client.execute(securedResource);" (ligne 57)?

    Fondamentalement, ce que des changements se produire au "client" entre les lignes 47 et 57?

Merci

OriginalL'auteur user224567893 | 2014-06-27