因此,我尝试从网站(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);
}
}
}
答案 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");