有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:从URL下载

有人能试试我的密码吗?几天前它还在工作,现在不行了。我没有修改任何东西,所以我怀疑那边的站长阻止了我。有人能帮我查一下吗?这是我学校项目的一部分

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 {

  }
}
}

共 (2) 个答案

  1. # 1 楼答案

    首先,清理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 ");
    

    在你打电话之前的某个时候

    编辑:这对我有用。你能试着运行它并告诉我们输出结果吗:

    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();
                }
            }
        }
    
  2. # 2 楼答案

    我检查了你的代码并运行了它我没有问题,一切正常。 你是在为代理人工作吗

    在这种情况下,您必须对其进行配置:

    System.setProperty("http.proxyHost", "my.proxy.name");
    System.setProperty("http.proxyPort", "8080");