моя проблема в том, что я не получаю, как войти в систему с Java и Apache HttpComponents (HttpClient v4.5.1) на определенный сайт: Site im trying to log in. У меня есть имя пользователя (test_admin) и пароль (тестирование) для входа в систему, но я думаю, что этого недостаточно, и мне нужно что-то еще. Я думаю, что это имеет какое-то отношение к полю security_token, который я вижу, когда я делаю запрос на получение uri, но я не знаю, как сохранить это или как его сохранить и что с ним делать после этого. Также есть скрытое поле ввода с именем login-ticket, но я не знаю, что это такое. Я хочу войти в систему, потому что мне нужно увидеть курсы и добавить новые. После попытки с несколькими реализаций коды им палкой с этим кодом:аутентификация с Java и apache HttpClient 4.5.1
public static void setGet(CloseableHttpClient httpClient) throws UnsupportedOperationException, IOException
{
HttpGet httpGet = new HttpGet("http://demo.studip.de/dispatch.php/admin/courses");
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println("GET Response Status:: "
+ httpResponse.getStatusLine().getStatusCode());
showEntity(httpResponse,httpResponse.getEntity());
}
public static HttpEntity setParam(int count, String[] params, String[] values)
{
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
for (int i = 0; i < count; i++)
{
formparams.add(new BasicNameValuePair(params[i],values[i]));
System.out.println("Paramater------------------> "+params[i]+" Values-------------> "+values[i]);
}
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
return entity;
}
public static void setPost(HttpClient httpC) throws ClientProtocolException, IOException
{
HttpPost httppost = new HttpPost("http://demo.studip.de/dispatch.php/admin/courses");
//String[] params = {"loginname", "password"};
//String[] values = {"test_admin", "testing"};
//HttpEntity entity = setParam(2, params, values);
HttpResponse response = httpC.execute(httppost);
System.out.println("POST Response Status:: "
+ response.getStatusLine().getStatusCode());
showEntity(response, response.getEntity());
}
public static void showEntity(HttpResponse httpResp, HttpEntity httpClient) throws IOException
{
httpClient = httpResp.getEntity();
if (httpClient != null)
httpClient = new BufferedHttpEntity(httpClient);
System.out.print(EntityUtils.toString(httpClient));
}
public static void main(String[] args) throws InterruptedException, IOException {
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("test_admin", "testing"));
CloseableHttpClient hc =
HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).build();
setGet(hc);
// HttpClient httpclient = HttpClients.createDefault();
setPost(hc);
setGet(hc);
}
Проблема теперь истите, что я получаю каждый раз один и тот же ответ от сервера я только увидеть страницу входа в ответ, когда сервер просит меня войти с именем пользователя и паролем.
Я бы порекомендовал себя без аутентификации или авторизации. Вы должны использовать некоторые рамки. –
Какую аутентификацию использует страница? Если он использует проверку подлинности формы, тогда вам нужно будет предоставить ответ, который задает имя пользователя/пароль в соответствии с ответом, который ищет форма. Моей рекомендацией было бы получить отладочный веб-прокси и отслеживать запросы и ответы, которые делает ваш браузер при входе в сайт в интерактивном режиме. Это, вероятно, поток, который вам нужно будет подражать вашему коду. – user3745362