请求HTTPS URL

问题描述:

我想抓住从美味的一些数据,使用URL类,请求HTTPS URL

URL url = URL(u); 
url.openStream(); 

开放流失败,401,

网址我现在用的就是,

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

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

UPDATE: 如下指出,URL类确实有一些机制来处理用户身份验证。然而,OP是正确的,del.icio.us服务返回401使用代码(如上所示)(使用我自己的帐户进行验证,并且我提供了正确的凭据......在未经编码的url中发送它们)。

修改的代码略有下降,但是,通过手动指定授权头工作得很好:

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()); 
    } 
+0

是的问题是美味,如果你有一个新的帐户,你需要使用他们的API的V2这就是为什么呼叫失败。 – 2009-12-16 14:13:12

而是使用阿帕奇共享libraries

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

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