我想抓住從美味的一些數據,使用URL類,請求HTTPS URL
URL url = URL(u);
url.openStream();
開放流失敗,401,
網址我現在用的就是,
字符串(」 https://「+ creds +」@ api.del.icio.us/v1/posts/recent「);
creds是base64編碼的字符串例如用戶:傳遞編碼,我也試過非編碼形式,也失敗了,有人可以告訴我我失蹤了嗎?
我想抓住從美味的一些數據,使用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());
}
而是使用阿帕奇共享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);
是的問題是美味,如果你有一個新的帳戶,你需要使用他們的API的V2這就是爲什麼呼叫失敗。 – 2009-12-16 14:13:12