Запрос HTTPS URL - PullRequest
       4

Запрос HTTPS URL

0 голосов
/ 15 декабря 2009

Я пытаюсь получить некоторые данные из Delicious, используя класс URL,

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

открытый поток завершается с 401,

URL-адрес, который я использую,

String ("https://" + creds +" @ api.del.icio.us / v1 / posts / недавний ");

creds - строка в кодировке base64, например user: pass encoded, я также пробовал некодированную форму, которая тоже не работает, может кто-нибудь сказать мне, что мне не хватает?

Ответы [ 3 ]

4 голосов
/ 15 декабря 2009

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());
    }
2 голосов
/ 15 декабря 2009

Вам необходимо предоставить аутентификатор пароля, например,

           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);
0 голосов
/ 15 декабря 2009

Скорее используйте Apache Commons библиотеки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...