Как я могу решить ошибку 403 при использовании Apache Commons IO?
Я пытаюсь получить код JSON из URL-адреса с библиотекой GSON, и я использую Apache Commons IO для получения URL-адреса. Но проблема в том, что когда я выполняю код, выход возвращает ошибку 403. Как я могу решить эту проблему? Вот код:
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.io.IOUtils;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class gsonexample {
public gsonexample() throws MalformedURLException, IOException {
String url = "http://freemusicarchive.org/api/get/albums.json?api_key=60BLHNQCAOUFPIBZ&limit=5";
String json = IOUtils.toString(new URL(url));
JsonParser parser = new JsonParser();
// The JsonElement is the root node. It can be an object, array, null or
// java primitive.
JsonElement element = parser.parse(json);
// use the isxxx methods to find out the type of jsonelement. In our
// example we know that the root object is the Albums object and
// contains an array of dataset objects
if (element.isJsonObject()) {
JsonObject albums = element.getAsJsonObject();
System.out.println(albums.get("title").getAsString());
JsonArray datasets = albums.getAsJsonArray("dataset");
for (int i = 0; i < datasets.size(); i++) {
JsonObject dataset = datasets.get(i).getAsJsonObject();
System.out.println(dataset.get("album_title").getAsString());
}
}
}
}
А вот и выход:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://freemusicarchive.org/api/get/albums.json?api_key=60BLHNQCAOUFPIBZ&limit=5
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at java.net.URL.openStream(URL.java:1045)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:1153)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:1140)
at gestor.de.colecciones.gsonexample.<init>(gsonexample.java:24)
at gestor.de.colecciones.main.main(main.java:62)
... 11 more
Exception running application gestor.de.colecciones.main
Java Result: 1
gsonexample.java:24 is String json = IOUtils.toString (новый URL(URL));
1 ответ
У меня та же проблема, и я нашел ваш вопрос.
Один из комментариев говорит, чтобы использовать
System.setProperty("http.agent", "curl/7.51.0").
Я так и сделал, и все еще получил ту же ошибку. Поэтому я скопировал и вставил URL-адрес в вашем коде (который был точно таким же, как мой) в адресную строку браузера и нажал клавишу ВВОД. Ответ был:
{"title":"Free Music Archive - Albums","message":"","errors":["invalid or disabled api_key"],"http_status":403,"dataset":[]}.
Надеюсь это поможет. Предложите нам обоим изучить freemusicarchive.com, чтобы найти действующий и / или не заблокированный ключ.
Удачи и счастливых вычислений.