请求HTTPS URL

时间:2009-12-15 14:12:00

标签: java url

我正在尝试使用URL类,

从Delicious获取一些数据
URL url = URL(u); 
url.openStream();

open flow因401失败,

我正在使用的网址是,

String(“https://”+ creds +“@ api.del.icio.us / v1 / posts / recent”);

creds是base64编码的字符串,例如用户:传递编码,我也尝试了非编码形式也失败了,有人能告诉我我错过了什么吗?

3 个答案:

答案 0 :(得分:4)

更新: 如下所述,URL类确实具有一些处理用户身份验证的机制。但是,OP是正确的,del.icio.us服务使用如上所示的代码返回401(使用我自己的帐户进行验证,并且我提供了正确的凭据..将它们发送到未编码的URL中)。

但是,稍微修改代码可以通过手动指定Authorization标头来正常工作:

    URL url = new URL("https://api.del.icio.us/v1/posts/suggest");
    byte[] b64 = Base64.encodeBase64("username:pass".getBytes());
    URLConnection conn = url.openConnection();
    conn.setRequestProperty("Authorization", "Basic " + new String(b64));
    BufferedReader r = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    while(r.ready()){
        System.out.println(r.readLine());
    }

答案 1 :(得分:2)

您需要提供这样的密码验证器,

           Authenticator.setDefault( new Authenticator()
            {
              @Override protected PasswordAuthentication getPasswordAuthentication()
              {
                    return new PasswordAuthentication(username, 
                            password.toCharArray()
                            );
              }
            } );

然而,这将添加往返,因为它必须等待401.您可以像这样预先设置身份验证标头,

        String credential = username + ":" + password;
        String basicAuth = "Basic " + 
                Base64.encode(credential.getBytes("UTF-8"));
        urlConnection.setRequestProperty("Authorization", basicAuth);

答案 2 :(得分:0)

而是使用Apaches Commons libraries