访问远程服务器/其他网站时,如何在Processing/Java中使用LoadString?
我想在Processing中编写一个简单的程序,从这里获取数据: 并在图表中显示它们。让我们考虑访问数据的最简单的例子:访问远程服务器/其他网站时,如何在Processing/Java中使用LoadString?,java,applet,processing,processing-ide,Java,Applet,Processing,Processing Ide,我想在Processing中编写一个简单的程序,从这里获取数据: 并在图表中显示它们。让我们考虑访问数据的最简单的例子: void setup() { size(400,400); } void draw() { background(0); fill(244); String[] t = loadStrings("https://btc-e.com/api/2/btc_usd/trades"); text(t[0],100,100); } 当我直接从Processin
void setup() {
size(400,400);
}
void draw() {
background(0);
fill(244);
String[] t = loadStrings("https://btc-e.com/api/2/btc_usd/trades");
text(t[0],100,100);
}
当我直接从Processing IDE(从Processing 1.5和2.0两个版本)以Java应用程序的形式运行这个应用程序时,这种方法非常有效。但是我将其导出为Java小程序(来自Processing 1.5),我不能在localhost或OpenProcessing上运行它。Java机器运行,询问,我是否想运行小程序,我接受,然后小程序保持灰色或白色,什么也不发生。原因是什么
是否存在任何安全问题,Java机器不允许代码从其他服务器获取外部数据?有没有办法绕过这个问题
我强调,我是在Java/Java Applet模式下工作的,而不是在JavaScript模式下工作的,我确信JavaScript不允许这种跨数据源的操作。您将遇到评论中指出的安全问题 选项1 创建一个作业,从外部URL检索数据并将其加载到您自己的服务器端数据库中。然后,在加载applet的同一台主机上需要一个服务器端servlet(可能是REST服务),以便从数据库检索数据 选项2 服务器端servlet,从远程URL检索数据并将其传输到HTTP响应,这样就不需要加载作业或数据库
唯一的另一个选择是设置反向代理以绕过同源策略,这是一个可怕的黑客想法。您正在加载的数据是一个JSON格式的数组,因此在这种情况下LoadString不会非常有用 您应该使用和来解析正在加载的数组中每个条目的数据 以下是仅使用
金额值的基本示例:
void setup(){
JSONArray data = loadJSONArray("https://btc-e.com/api/2/btc_usd/trades");//load the data
for (int i = 0; i < data.size(); i++) {//traverse the data
JSONObject entry = data.getJSONObject(i); //get each entry in the list/array
//parse the values
float amount = entry.getFloat("amount");
int price = entry.getInt("price");
String item = entry.getString("item");
String pc = entry.getString("price_currency");
int tid = entry.getInt("tid");
int date = entry.getInt("date");
String tt = entry.getString("trade_type");
//do something with the data
float x = (float)i/data.size() * width;
float y = 100 - (amount * 20);
line(x,height,x,y);
}
}
void setup(){
JSONArray数据=加载JSONArray(“https://btc-e.com/api/2/btc_usd/trades“”;//加载数据
对于(inti=0;i
以下是输出:
另一个注意事项:在代码中,在draw()循环中使用loadStrings,这意味着每秒多次(默认情况下大约60次)加载相同的数据,这不是一个好主意。您应该加载数据一次,将其放在顶级变量中,并在需要时在draw()循环中重用加载的数据
此外,如果正在加载外部数据,则可能需要对小程序进行签名。
退房我也使用了相同的指南来发布。您能否在加载字符串时尝试一下,然后得到错误消息?您还可以发布您的loadStrings
方法吗?您应该会看到Java中存在某种错误,这很可能与安全性有关。@ns47731-loadStrings是处理提供的方法,它不是我的。@zapl-似乎这就是原因。你给我的消息来源说:“沙盒小程序不能(…)从任何第三方服务器(它来自的服务器以外的任何服务器)检索资源。”这很遗憾……你签署了小程序吗?