Apache HttpClient, вход в систему на основе форм, не извлекает содержимое HTML - PullRequest
0 голосов
/ 15 февраля 2019

Я использую Httpclient из apache для доступа к другой странице за аутентификацией входа в систему на основе форм, но в результате получаю ту же страницу входа в систему на основе форм.

Должен ли я делать somenthing по-другому?

public static void main(String[] args) throws ClientProtocolException, IOException, InterruptedException {
    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpPost httppost = new HttpPost("http://localhost/salvaurls/");

    // Request parameters and other properties.
    List<NameValuePair> params = new ArrayList<NameValuePair>(4);
    params.add(new BasicNameValuePair("return_url", "http://localhost/salvaurls/painel.php")); 
    params.add(new BasicNameValuePair("action", "http://localhost/salvaurls/autenticacao.php?acao=login"));
    params.add(new BasicNameValuePair("login", "desenvolvimento@gmail.com.br"));
    params.add(new BasicNameValuePair("senha", "123"));
    UrlEncodedFormEntity entity_ = new UrlEncodedFormEntity(params, Consts.UTF_8);
    httppost.setEntity(entity_);

    //Execute and get the response.
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();

    if (entity != null) {
        try (InputStream is = entity.getContent()) {
            System.out.println("entrou");
            Thread.sleep(2000);

            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String str ="";
            while ((str = br.readLine()) != null){
                System.out.println(""+str);
            }                
        }
    }
}

index.html - форма входа в систему, которая отображается после запуска кода:

<body id="LoginForm">
    <div class="container">
        <h1 class="form-heading">login Form</h1>
        <div class="login-form">
            <div class="main-div">
                <div class="panel">
                    <h2>Salva URLs</h2>
                    <p>Please enter your email and password</p>
                </div>
                <form id="Login" action="autenticacao.php?acao=login" method="post">
                    <div class="form-group">
                        <input type="email" class="form-control" id="login" name="login"
                            placeholder="Email Address">
                    </div>
                    <div class="form-group">
                        <input type="password" class="form-control" id="senha" name="senha"
                            placeholder="Password">
                    </div>
                    <div class="forgot">
                        <a href="reset.html">Forgot password?</a>
                    </div>
                    <button type="submit" class="btn btn-primary">Login</button>
                </form>
            </div>
        </div>
    </div>
    </div>
</body>

1 Ответ

0 голосов
/ 20 февраля 2019

Вы вообще не вызываете URL для входа.Измените URL HttpPost на http://localhost/salvaurls/autenticacao.php?acao=login и удалите параметр действия из списка.

HttpPost httppost = new HttpPost("http://localhost/salvaurls/autenticacao.php?acao=login");

// Request parameters and other properties.
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("return_url", "http://localhost/salvaurls/painel.php"));
params.add(new BasicNameValuePair("login", "desenvolvimento@gmail.com.br"));
params.add(new BasicNameValuePair("senha", "123"));

Обычно сервер отправляет cookie, если вы успешно прошли аутентификацию.Для дальнейших запросов вам может понадобиться хранилище cookie.

CookieStore cookieStore = new BasicCookieStore();
HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
HttpClient client = HttpClients.createDefault();

HttpPost httppost = new HttpPost("http://localhost/salvaurls/autenticacao.php?acao=login");

// Request parameters and other properties.
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("return_url", "http://localhost/salvaurls/painel.php"));
params.add(new BasicNameValuePair("login", "desenvolvimento@gmail.com.br"));
params.add(new BasicNameValuePair("senha", "123"));
UrlEncodedFormEntity entity_ = new UrlEncodedFormEntity(params, Consts.UTF_8);
httppost.setEntity(entity_);

HttpResponse response = client.execute(httppost, context);
String response = EntityUtils.toString(response.getEntity());

Если вы выполняете дополнительные аутентифицированные запросы, вам необходимо каждый раз использовать HttpClientContext с хранилищем cookie.Надеюсь, это поможет.

...