因此,我试图从网站(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-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
关于java - 阅读Fortnite Json API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54027968/