【问题标题】:opening URLConnection with a particular web resource使用特定的 Web 资源打开 URLConnection
【发布时间】:2011-01-19 13:17:02
【问题描述】:

我无法打开带有特定网络资源的 URLConnection。我得到了

“java.net.ConnectException: Connection timed out:”。是因为该域阻止了直接 URL 连接吗?如果是这样,他们如何阻止这个?下面是我写的代码sn-p。

代码sn-p:

导入 java.io.; 导入 java.net.;

公共类TestFileRead{

public static void main(String args[]){

    try{

        String serviceUrl = "http://xyz.com/examples.zip";
        HttpURLConnection serviceConnection = (HttpURLConnection) new URL(serviceUrl).openConnection();
        System.out.println(serviceConnection);
        serviceConnection.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"); 

        DataInputStream din=new DataInputStream(serviceConnection.getInputStream());
        FileOutputStream fout=new FileOutputStream("downloaded");
        DataOutputStream dout=new DataOutputStream(fout);
        int bytes;
        while(din.available()>0){
            bytes=din.readByte();
            dout.write(bytes);
        }
    }catch(Exception ex){
        ex.printStackTrace();
    }

}

}

【问题讨论】:

  • 您可以通过网络浏览器从同一台机器访问相同的 URL 吗?可能存在代理问题。
  • 是的,我可以从我机器上的网络浏览器访问相同的 URL。
  • 您的网络浏览器设置中是否有任何代理设置?
  • 你身边可能有防火墙拒绝Java进程。
  • 您是仅在 servlet 中遇到此问题,还是在普通 Java 应用程序中也遇到此问题?如果是第一个,请提及 servletcontainer 的品牌/版本。如果是最后一个,那么 servlets 标记是不必要的。

标签: java servlets


【解决方案1】:

您可能正在使用浏览器中的代理设置来访问 Yahoo 主页,该主页解释了为什么它在您的浏览器中运行而不是在您的代码中运行。您需要为您的 Java 应用程序配置代理。

最简单的方法是在运行代码时设置系统属性http.proxyHost 和http.proxyPort(在Eclipse 中或从命令行运行时只需添加-Dhttp.proxyHost=your.host.com -Dhttp.proxyPort=80),你应该很高兴。从您的浏览器配置/设置中获取代理设置。

编辑:This link 在用 Java 处理代理时,很好地解释了可能的解决方案。

【讨论】:

  • 它对我不起作用,我也尝试在“Java 控制面板”中设置自动代理配置脚本,这与浏览器中使用的脚本相同,但这对我也不起作用。
  • @selvam:它不能工作的原因有很多,从拼写错误到其他任何东西。您能否用代码 sn-p 以及您如何执行代码(即系统参数等)来更新您的问题?
  • 我已经用代码 sn-p 更新了这个问题。它只是一个普通的java程序。我没有使用任何系统参数。正如我已经说过的,我已经在 java 控制面板中配置了 proxy-auto-config(pac) java 脚本,浏览器中正在使用相同的脚本。
  • @selvam:我从未使用 pac 配置 JVM 进程代理。您可以尝试我帖子中建议的系统参数方法并告诉我是否可行吗?测试它可以帮助我们排除可能性。
【解决方案2】:

试试这个,它对我来说很好,返回索引页面。

String serviceUrl = "http://yahoo.com";     
HttpURLConnection serviceConnection = (HttpURLConnection) new URL(serviceUrl).openConnection();
serviceConnection.addRequestProperty("User-Agent", "blah"); //some sites deny access to some pages when User-Agent is Java
BufferedReader in = new BufferedReader(new InputStreamReader(serviceConnection.getInputStream()));

【讨论】:

    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 2014-04-16
    • 2016-04-12
    • 2017-04-22
    • 2021-11-09
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多