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

トーストは、ステータス コード 403 のエラー コールバックを返します。いくつかのエンドポイントを試し、API から提案されたヘッダーを追加しようとしましたが、すべて同じステータス コードを返します。

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