自动选择并提交给定URL上的表单值

时间:2012-01-18 23:07:15

标签: java forms

我希望我的Java应用程序从http://www.nasdaqomxbaltic.com/或任何其他提供数据文件的站点下载CSV文件。

如何在下载csv文件之前告诉我的java应用程序更改值和更改值?

以下是选择日期范围的表格:http://www.nasdaqomxbaltic.com/market/?pg=charts&idx_main[]=OMXBBGI。目前网站分配了默认值和来自的值,我得到的CSV文件包括默认日期和迄今为止的数据。

您是否可以建议任何可以更改和更改值的Java库,以便下载仅包含特定日期范围的csv文件?

1 个答案:

答案 0 :(得分:1)

首先,您可以使用以下网址按日期搜索:

http://www.nasdaqomxbaltic.com/market/?pg=charts&lang=en&idx_main%5B%5D=OMXBBGI&add_index=OMXBBPI&add_equity=LT0000128266&period=6months&start_d=19&start_m=7&start_y=2011&end_d=19&end_m=1&end_y=2012

您可以在这些参数中提供所需的日期值:

ex :start_d=19&start_m=7&start_y=2011&end_d=19&end_m=1&end_y=2012

然后想法是获取渲染的网页。在这里,您可以像这样使用Jsoup library

Document doc = Jsoup.connect("http://www.nasdaqomxbaltic.com/market/?pg=charts&lang=en&idx_main%5B%5D=OMXBBGI&add_index=OMXBBPI&add_equity=LT0000128266&period=6months&start_d=19&start_m=7&start_y=2011&end_d=19&end_m=1&end_y=2012").get();
Elements csvLinkFiles= doc.select("div.download > a");
int filesCounter = 0;
for (Element link : csvLinkFiles) {
    String href = link.attr("href");
    URL csvFileLink= new URL(href);
    ReadableByteChannel rbc = Channels.newChannel(csvFileLink.openStream());
    FileOutputStream fos = new FileOutputStream("csv-file-"+ (++filesCounter) + ".csv");
    fos.getChannel().transferFrom(rbc, 0, 1 << 24);
}

我不确定代码,但想法就在这里。

编辑:

执行一点请求后,您似乎必须执行HTTP Get(因为该文件不是静态的,并且会根据请求返回)。

以下是一小段代码,应该替换URL csvFileLink= new URL(href)行下面的所有代码:

GetMethod get = new GetMethod(href);
InputStream in = get.getResponseBodyAsStream();
File file=new File("csv-file-"+ (++filesCounter) + ".csv");
OutputStream out = new FileOutputStream(file);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
    out.write(bytes, 0,  read);
}
in.close();
out.flush();
out.close();