-1

这是我的代码:

公共类 JavaSoapUi {

 public static void main(String[] args) throws Exception {

    String requestUrl = "myurl";
    URLConnection connection =new URL(requestUrl).openConnection();
    System.out.println( "orignal url: " + connection.getURL() );
    connection.connect();
    System.out.println( "connected url: " + connection.getURL() );     
    HttpPost httpPost = new HttpPost(requestUrl);       
    String username = "user";
    String password = "pass";
    String encoded = DatatypeConverter.printBase64Binary((username + ":" + password).getBytes("UTF-8"));
    httpPost.addHeader("AUTHORIZATION", "Basic " + encoded);
    HttpClient httpClient = HttpClientBuilder.create().build();
    HttpResponse response = httpClient.execute(httpPost);       
    System.out.println("Response" + response.getStatusLine().toString());
    HttpEntity entity = response.getEntity();           
    String responseString = EntityUtils.toString(entity, "UTF-8");
    System.out.println("ResponseString" + responseString);      
    EntityUtils.consume(entity);

}

我得到输出错误:HTTP/1.1 301 Moved Permanently

如果我在 SOAP UI 中使用用户名和密码,通过使用基本身份验证,我可以获得输出。但是当我在 Java 代码中使用相同的用户名和密码时,我得到了错误。

任何人帮助我。

4

1 回答 1

0

由于您添加了RFC中定义的标头,因此您Authoritzation的 http-header 对我来说看起来不错。此外,如果问题出在您的问题上,那么您的电话必须收到一个而不是您收到的,因此错误可能出在您的. 检查您的错误响应以查看您的服务的正确性。AuthoritzationError HTTP 401 UnauthorizedError HTTP 301 - Moved permanentlyurllocation http-header301url

根据 OP 评论进行编辑

正如我所说,您从错误响应中检查标头location,并且301似乎url是并使用以下命令将其加载到您正在执行客户端的 JRE 的信任库中(正确的方法是添加您的服务器证书,但是直接执行测试加载服务器证书就足够了)。https://urlError: unable to find valid certification path to requested targeturlcertificate authority

keytool -import -alias somealias -file serverCertificate.cer -keystore JRE_HOME/lib/security/cacerts

请注意,keytool在 java 发行版中JAVA_HOME/bin/keytoolJRE_HOME/lib/security/cacerts信任库的默认密码是changeit.

希望这可以帮助,

于 2015-01-19T20:35:39.123 回答