0

我正在使用 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以了解其他可能的原因。

4

1 回答 1

0

http 标头应如下所示:“Accept: application/vnd.github+json” “-H”仅在使用 curl 时才需要。你可以试试这个代码:client.addHeader(“Accept”, “application/vnd.github+json”)

于 2018-11-06T18:14:53.803 回答