401 Несанкционированный при использовании Pinboard API для добавления поста в Android - PullRequest
2 голосов
/ 11 апреля 2011

Привет всем, Я использую Pinboard API для добавления сообщения из моего приложения для Android. Каждый раз, когда я отправляю запрос GET с необходимыми учетными данными и аргументами, я получаю 401 код несанкционированного ответа. Я попробовал тот же URL из кода PHP, и сообщение добавляется в Pinboard без каких-либо ошибок. Любая идея, где я иду не так?
Вот код:

    private void postToPinboard(){

    String url = "https://.muUsername:myPassword@api.pinboard.in/v1/posts/add?";
    HttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet(url);

     try {
            // Adding my data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("description","Description data");
            nameValuePairs.add(new BasicNameValuePair("url", "http://somewebsite.com"));

            String paramString = URLEncodedUtils.format(nameValuePairs, "utf-8");
            url +=paramString;

            // Execute HTTP Post Request
            HttpResponse response = client.execute(get);

            Log.v("", "RESPONSE CODE: "+response.getStatusLine());// giving 401 Unauthorized 

        } catch (ClientProtocolException e) {
            // do something
        } catch (IOException e) {
            // do domething
        }
        finish();
}

1 Ответ

1 голос
/ 12 апреля 2011

Наконец-то у меня возникла проблема: использование Pinboard API требует, чтобы Android поддерживал базовую аутентификацию HTTP. Итак, вот как я заставил это работать:

    private void postToPinboard(){

        String url ="https://api.pinboard.in/v1/posts/add?";

        DefaultHttpClient client = new DefaultHttpClient();

    String credentials = Base64.encodeBytes((username+":"+password).getBytes());

    if(credentials!=null){

        try {

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

            nameValuePairs.add(new BasicNameValuePair("description", "Description data");
            nameValuePairs.add(new BasicNameValuePair("url", "http://somewebsite.com"));

            String paramString = URLEncodedUtils.format(nameValuePairs, "utf-8");

            url +=paramString;

            HttpGet get = new HttpGet(url);
            get.addHeader("Authorization","Basic "+credentials);

           HttpResponse response = client.execute(get);

               if(response.getStatusLine().getStatusCode() == 200){
                   //       Added to pinboard
               }else{
                   //       Error adding to Pinboard
               }

        } catch (ClientProtocolException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
finish();

}

...