有人可以尝试我的代码吗?它在几天前工作,现在不是。我没有修改任何东西,所以我怀疑那边的网站管理员阻止了我。有人可以帮我查一下吗?这是我学校项目的一部分。
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 {
}
}
}
答案 0 :(得分:3)
首先,清理您的IO异常,因为这可能会使问题变得模糊 - 请检查您是否可以写入D:。
如果您因用户代理标头而被网站阻止:
这将显示您的用户代理标头: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();
}
}
}
答案 1 :(得分:0)
我检查了你的代码并运行它我没有问题,一切正常。 你是在代理人背后工作吗?
在这种情况下,你必须配置它:
System.setProperty("http.proxyHost", "my.proxy.name");
System.setProperty("http.proxyPort", "8080");