我正在玩Asana API。 因此,每当我提出请求时,我总是会收到错误请求错误。
所以我得到的是:
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),我可以获得正确的结果。
我是否对上述代码做错了什么?
答案 0 :(得分:4)
好的,所以我自己解决了这个问题。 我认为问题在于身份验证。
我现在使用的是:
,而不是手动设置Authorization标头get.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials(apiKey, ""), "US-ASCII", false));
现在工作正常,我可以得到正确的结果。
如果有人感兴趣,github上的Asana API有一个Java library。