HTTP 1.1 400 Bad Request — Android-клиент Asana

Я просто играю с Asana API. Поэтому всякий раз, когда я делаю запрос, я всегда получаю ошибку Bad Request.

Итак, что я получил, это:

public class Asana {

    private static String apiKey;
    private DefaultHttpClient httpClient;
    private final String apiUrl = "https://app.asana.com/api/1.0/";

    public Asana(String key) {
        apiKey = key;
        httpClient = new DefaultHttpClient();
    }

    public void get(String target) {
        new APIRequest().execute(target);
    }

    private class APIRequest extends AsyncTask<String, Void, HttpResponse> {

        protected HttpResponse doInBackground(String... params) {
            String query = apiUrl + params[0];

            Log.d("#query", query);

            HttpGet get = new HttpGet(query);
            String cred = apiKey + ':';
            String encodedKey = Base64.encodeToString(cred.getBytes(), Base64.DEFAULT);

            Log.d("#encodedKey", encodedKey);

            get.setHeader("Authorization", "Basic " + encodedKey);
            get.setHeader("Content-Type", "application/json; charset=UTF-8");

            Log.d("#getRequestLine", get.getRequestLine().toString());

            /*httpClient.getCredentialsProvider().setCredentials(
                    new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthPolicy.BASIC),
                    new UsernamePasswordCredentials(apiKey, "")
            );*/

            HttpResponse resp = null;
            try {
                resp = httpClient.execute(get);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                httpClient.getConnectionManager().shutdown();
            }

            return resp;
        }

        protected void onPostExecute(HttpResponse response) {
            StatusLine statusLine = response.getStatusLine();
            ByteArrayOutputStream out = new ByteArrayOutputStream();

            Log.d("#statusLine", statusLine.toString());

            try {
                response.getEntity().writeTo(out);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            Log.d("#out", out.toString());
        }
    }

}

Используя cURL или простой клиент REST (Chrome), я могу получить правильные результаты.

Я делаю что-то не так с приведенным выше кодом?


person jithujose    schedule 02.01.2013    source источник
comment
какое значение в params[0]?   -  person Taruni    schedule 02.01.2013
comment
Он содержит ресурс API, такой как рабочие пространства или пользователи/я и т. д.   -  person jithujose    schedule 02.01.2013


Ответы (1)


Хорошо, поэтому я решил проблему сам. Я думаю, что проблема была с аутентификацией.

Вместо того, чтобы вручную устанавливать заголовок авторизации, я теперь использую это:

get.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials(apiKey, ""), "US-ASCII", false));

И теперь он работает нормально, и я могу получить правильные результаты.

Если кому-то интересно, на github есть библиотека для API Asana.

person jithujose    schedule 02.01.2013