Читайте Fortnite Json API - PullRequest
       6

Читайте Fortnite Json API

0 голосов
/ 03 января 2019

Поэтому я пытаюсь прочитать файл JSON с веб-сайта ( fortniteapi.com ), каждый раз, когда я пытаюсь загрузить файл на локальный компьютер, он не загружается.Я занимаюсь этим около недели и не могу понять, почему это не сработает.

также я использую Гсон

Вот мой код:

package sample;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception{
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
    primaryStage.setTitle("Fortnite");
    primaryStage.setScene(new Scene(root, 300, 275));
    primaryStage.show();
    ReadJson();
}


public static void main(String[] args) {
    launch(args);
}

public void  ReadJson()
{
    try {
        // read url
        String sURL = "https://fortnite-public-api.theapinetwork.com/prod09/users/id?username=Ninja"; //just a string
        // Connect to the URL using java's native library
        URL url = new URL(sURL);
        URLConnection request = url.openConnection();
        request.connect();

        // Convert to a JSON object
        JsonParser jp = new JsonParser(); //from gson
        JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element
        JsonObject rootobj = root.getAsJsonObject();
        String output = rootobj.get("username").getAsString(); //just grab the username value

        // print out the result/output
        System.out.println(output);

    } catch (IOException e) {
        System.out.println("Unexpected Error.");
       // JOptionPane.showMessageDialog(null, "Oh no something went wrong.", "Unexpected Error", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
    }
}

}

1 Ответ

0 голосов
/ 03 января 2019

Ошибка

После прочтения errorStream() из request (после приведения его к HttpURLConnection) HTML печатается и гласит:

Доступ запрещен | fortnite-public-api.theapinetwork.com использовал Cloudflare ограничить доступ

и

Владелец этого сайта (fortnite-public-api.theapinetwork.com) имеет запретил вам доступ на основании подписи вашего браузера (Mybrowsersignature).

Что это значит

Cloudflare заявляет, что эта ошибка означает, что:

владелец домена блокирует этот запрос на основе веб-клиента подпись браузера.

и что эта функция называется «Проверка целостности браузера», оттуда мы можем найти Что делает Проверка целостности браузера? :

Проверка целостности браузера Cloudflare (BIC) похожа на плохое поведение и ищет общие заголовки HTTP, которые чаще всего используются спамерами и запрещает доступ к вашей странице. Это также бросит вызов посетителям, которые делают не иметь пользовательского агента или нестандартного пользовательского агента (также часто используется путем злоупотребления ботами, сканерами или посетителями).

Решение

Мы можем изменить User-Agent из request на что-то, что должно быть действительным до request.connect();, примерно так (пользовательский агент скопирован из User-Agent | MDN ):

request.setRequestProperty("User-Agent",
            "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0");

Ожидается вывод:

Ninja
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...