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を確認してください。