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

我也在用格森

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

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);
    }
}


}

最佳答案

错误

读取errorStream()request之后(将其转换为HttpURLConnection之后),将打印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标头和
  拒绝访问您的页面。它还将挑战那些
  没有用户代理或非标准用户代理(也常用
  滥用漫游器,爬虫或访问者)。




我们可以将User-Agentrequest更改为在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

关于java - 阅读Fortnite Json API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54027968/

10-09 06:51