阅读Fortnite Json API

时间:2019-01-03 18:37:58

标签: java json gson

因此,我尝试从网站(fortniteapi.com)中读取JSON文件,每次尝试将文件下载到本地计算机时都不会下载。我已经在这里待了大约一个星期,但我不知道为什么它不起作用。

我也在使用 Gson

到目前为止,这是我的代码:

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 :(得分:1)

错误

在读取errorStream()的{​​{1}}之后(将其转换为request之后),HTML会打印并显示:

  

访问被拒绝| fortnite-public-api.theapinetwork.com使用过Cloudflare   限制访问

  

此网站(fortnite-public-api.theapinetwork.com)的所有者拥有   根据浏览器的签名禁止访问   (mybrowsersignature)。

这是什么意思

Cloudflare指出that error的意思是:

  

域所有者正在基于客户端的网络阻止此请求   浏览器签名。

并将该功能称为“浏览器完整性检查”,从那里我们可以找到What does the Browser Integrity Check do?

  

Cloudflare的浏览器完整性检查(BIC)与不良行为类似   并查找垃圾邮件发送者最常滥用的常见HTTP标头和   拒绝访问您的页面。它还将挑战那些   没有用户代理或非标准用户代理(也常用   通过滥用漫游器,爬虫或访问者)。

解决方案

我们可以将HttpURLConnection中的User-Agent更改为在 request之前应该有效的内容(从User-Agent | MDN复制用户代理) :

request.connect();

打印出预期的输出:

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