两个相关的问题,我正在使用Apache HTTP Client 4.x API。 myHttpPost是HttpPost的实例,而myHttpClient是HttpClient的实例。我正在尝试使用基本身份验证发送请求。所以我有一个HttpClient并创建一个HttpPost。

设置基本身份验证 header 的“蛮力”方式似乎是在HttpPost header 中进行设置。

String encoding = Base64Encoder.encode("username" + ":" + "password");
myHttpPost.setHeader("Authorization", "Basic " + encoding);

上面的示例来自另一个堆栈溢出问题(现在找不到指向它的链接)。关于Base64Encoder类-我可以在哪个包中找到它,或者从哪里下载它?

主要问题-我希望使用以下代码以更美观的方式进行基本身份验证:
myHttpClient.getCredentialsProvider().setCredentials(
    new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthPolicy.BASIC),
    new UsernamePasswordCredentials("username", "password")
);

但这似乎不起作用。那么上面的第一个示例是使用Apache HTTP Client 4.0进行基本身份验证的正确方法吗?还是有一种更清洁/更简单的方法。

最佳答案



Base64Encoder可以来自不同的地方,我找不到与您的静态encode方法匹配的东西。

至于凭据,您需要在scheme上将Basic设置为AuthScope,如下所示:

myHttpClient.getCredentialsProvider().setCredentials(
    new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, "basic"),
    new UsernamePasswordCredentials("username", "password")
);

或者
myHttpClient.getCredentialsProvider().setCredentials(
    new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthPolicy.BASIC),
    new UsernamePasswordCredentials("username", "password")
);

10-07 16:46