我正在使用 loopj 创建一个 GET 请求以从 GitHub API v3 获取数据。然而,状态码 403 在回调中不断返回,我已经尝试了我能想到的所有可能的解决方案。
这是我使用的代码,此方法在按钮的 onclicklistener 中调用。我使用我开发的其他应用程序中的示例代码并按照 loopj 文档的说明创建。
private void getDataFromGit() {
final AsyncHttpClient client = new AsyncHttpClient();
final String url = "https://api.github.com";
client.addHeader("-H ", "application/vnd.github+json");
client.get(getApplicationContext(), url,null, ContentType.APPLICATION_JSON.getMimeType(), new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
Toast.makeText(getApplicationContext(), "On Success: ", Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
Toast.makeText(getApplicationContext(), "On Success: ", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
Toast.makeText(getApplicationContext(), "On Failure: 1 " + String.valueOf(statusCode) + " "+ errorResponse.toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) {
Toast.makeText(getApplicationContext(), "On Failure: 2 " + String.valueOf(statusCode) + " " + errorResponse.toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Toast.makeText(getApplicationContext(), "On Failure: 3 " + String.valueOf(statusCode) + " " + throwable.toString(), Toast.LENGTH_SHORT).show();
}
});
}
根据 git hub api docs,此请求不需要身份验证。
https://developer.github.com/v3/media/#request-specific-version
Toast 正在返回状态代码为 403 的失败回调。我尝试了几个端点,尝试从 API 添加 sugested 标头,但它们都返回相同的状态代码。
2018-10-22 21:34:47.325 4685-4685/devarthur.post.gitrepos E/GET: On error cz.msebera.android.httpclient.client.HttpResponseException: Forbidden
我还能做些什么来使用 loopj 获得状态代码 200?
编辑。
所以我得到了一些建议,并找到了关于这个 API 的 403 错误的更多信息。看起来默认情况下必须有一个 User-Agent 参数。我试图以此为例创建请求,如果可行,我会将其发布为答案。
行政规则禁止的请求。请确保您的请求具有 User-Agent 标头 ( http://developer.github.com/v3/#user-agent-required )。检查https://developer.github.com以了解其他可能的原因。