Java客户端程序使用HttpClient API发送摘要身份验证请求 [英] java client program to send digest authentication request using HttpClient API

查看:517
本文介绍了Java客户端程序使用HttpClient API发送摘要身份验证请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有restlet示例客户端程序,该程序发送摘要请求.与此类似,我需要一个Java客户端程序,该程序使用HttpClient api发送摘要请求. 有人可以给我发送示例代码吗?预先感谢.

I have restlet sample client program which sends the digest request. Similar to this I need java client program which sends a digest request using HttpClient api. Can anybody send me sample code. Thanks in advance.

        Reference reference = new Reference("http://localhost:8092/authenticate");
        Client client = new Client(Protocol.HTTP);
        Request request = new Request(Method.GET, reference);
        Response response = client.handle(request);
        System.out.println("response: "+response.getStatus());

        Form form = new Form();
        form.add("username", "rajesh");
        form.add("uri", reference.getPath());

        // Loop over the challengeRequest objects sent by the server.
        for (ChallengeRequest challengeRequest : response
                .getChallengeRequests()) {
            // Get the data from the server's response.
            if (ChallengeScheme.HTTP_DIGEST
                    .equals(challengeRequest.getScheme())) {
                Series<Parameter> params = challengeRequest.getParameters();
                form.add(params.getFirst("nonce"));
                form.add(params.getFirst("realm"));
                form.add(params.getFirst("domain"));
                form.add(params.getFirst("algorithm"));
                form.add(params.getFirst("qop"));
            }
        }

        // Compute the required data
        String a1 = Engine.getInstance().toMd5(
                "rajesh" + ":" + form.getFirstValue("realm") + ":" + "rajesh");
        String a2 = Engine.getInstance().toMd5(
                request.getMethod() + ":" + form.getFirstValue("uri"));
        form.add("response", Engine.getInstance().toMd5(
                a1 + ":" + form.getFirstValue("nonce") + ":" + a2));

        ChallengeResponse challengeResponse = new ChallengeResponse(
                ChallengeScheme.HTTP_DIGEST, "", "");
        challengeResponse.setCredentialComponents(form);

        // Send the completed request
        request.setChallengeResponse(challengeResponse);
        response = client.handle(request);

        // Should be 200.
        System.out.println(response.getStatus());

推荐答案

在这里:

HttpClient client = new HttpClient();
Credentials creds = new UsernamePasswordCredentials(username, password);
client.getState().setCredentials(new AuthScope(host, port, realmName), creds);
GetMethod get = new GetMethod(url);
get.setDoAuthentication(true);
client.getParams().setAuthenticationPreemptive(true); // seems to be necessary in most cases
client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, Collections.singleton(AuthPolicy.DIGEST));//need to register DIGEST scheme not the basic
client.getAuthSchemes().register(AuthPolicy.DIGEST, new DigestSchemeFactory());
client.executeMethod(get);
result = get.getResponseBodyAsString();

这篇关于Java客户端程序使用HttpClient API发送摘要身份验证请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆