使用Java和apache进行身份验证HttpClient 4.5.1

时间:2015-10-22 13:58:53

标签: java cookies login httpclient apache-httpcomponents

我的问题是,我不知道如何使用Java和Apache HttpComponents(HttpClient v4.5.1)登录到特定站点: Site im trying to log in。我有用户名(test_admin)和密码(测试)登录,但我认为这还不够,我需要更多的东西。我认为这与字段security_token有关,我看到当我向uri发出get请求时,但我不知道如何保存它或如何保存它以及之后如何处理它。还有一个名为login-ticket的隐藏输入字段,但我不知道它们是什么。我想登录,因为我需要查看课程并添加一些新课程。在尝试了几个代码实现后,我坚持使用这段代码:

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

    }

现在的问题是我每次从服务器得到相同的答案我只看到响应中的登录页面,服务器要求我用用户名和密码登录。

1 个答案:

答案 0 :(得分:0)

您从服务器401,403,301,302或200获得哪些代码?