有人可以试试我的代码吗?几天前还可以用,现在不行了。我没有修改任何东西,所以我怀疑那边的站长已经屏蔽了我。有人可以帮我查一下吗?这是我学校项目的一部分。
public class Cost extends TimerTask{
public void run() {
Calendar rightNow = Calendar.getInstance();
Integer hour = rightNow.get(Calendar.HOUR_OF_DAY);
if (hour==1) {
try {
URL tariff = new URL("http://www.emcsg.com/MarketData/PriceInformation?downloadRealtime=true");
ReadableByteChannel tar = Channels.newChannel(tariff.openStream());
FileOutputStream fos = new FileOutputStream("test.csv");
fos.getChannel().transferFrom(tar, 0, 1<<24);
} catch (IOException ex) {
Logger.getLogger(Cost.class.getName()).log(Level.SEVERE, null, ex);
}
}
else {
}
}
}
最佳答案
首先,清理 IO 异常,因为这可能会掩盖问题 - 检查您是否可以写入 D:。
如果您因用户代理 header 而被网站阻止:
这将显示您的用户代理 header :http://pgl.yoyo.org/http/browser-headers.php 。然后答案为Setting user agent of a java URLConnection告诉您如何设置标题。
您需要在实例化 URL 和打开流之间添加一个步骤:
URL tariff = new URL("http://www.emcsg.com/MarketData/PriceInformation?downloadRealtime=true");
java.net.URLConnection c = tariff.openConnection();
c.setRequestProperty("User-Agent", " USER AGENT STRING HERE ");
ReadableByteChannel tar = Channels.newChannel(c.getInputStream());
或者你可以尝试这样做:
System.setProperty("http.agent", " USER AGENT STRING HERE ");
在调用openStream()
之前的某个时间。
编辑:这对我有用。您可以尝试运行它并让我们知道输出吗:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class TestURL {
public static void main(String[] args) {
try {
URL tariff = new URL("http://www.emcsg.com/MarketData/PriceInformation?downloadRealtime=true");
URLConnection c = tariff.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
System.out.println(br.readLine());
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
关于Java:从 URL 下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883626/