【问题标题】:SocketException: Connection resetSocketException:连接重置
【发布时间】:2013-06-11 15:06:00
【问题描述】:

我几乎从here 复制了以下代码。我在第 10 行得到一个 java.net.SocketException 说“连接重置”。

import java.net.*;
import java.io.*;
import org.apache.commons.io.*;

public class HelloWorld {
    public static void main(String[] x) {
        try {
            URL url = new URL("http://money.cnn.com/2013/06/07/technology/security/page-zuckerberg-spying/index.html");
            URLConnection con = url.openConnection();
            InputStream in = con.getInputStream();
            String encoding = con.getContentEncoding();
            encoding = encoding == null ? "UTF-8" : encoding;
            String body = IOUtils.toString(in, encoding);
            System.out.print(body);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我担心这实际上可能不是实际代码的问题,而是我需要授予 Java 一些权限。我的代码有问题还是环境问题?

【问题讨论】:

  • 哪个操作系统?哪个环境? (提示:在公司环境中,很可能不允许您直接连接到 Web 服务器,并且您必须通过代理)
  • 我同意@fge,您也可以尝试修改用户代理,因为某些代理或 IDS 系统会阻止可能来自机器人的请求。尝试在System.setProperty("http.agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36");之类的内容之前添加
  • 我在 ubuntu 12 上。我在许多其他项目中使用直接连接(除非 python 在幕后为我做一些事情)。我尝试了许多网站,但似乎没有任何效果。
  • 我尝试了 System.setProperty 建议。我在声明 URL 变量之前进行了确切的调用。它似乎没有改变任何东西。作为另一个说明,我有一个实际的机器人(apache nutch),正如我们所说,它是用 Java 爬行维基百科文章编写的。

标签: java sockets


【解决方案1】:

我使用您的代码进行了少量修改,因为我手头没有 IOUtils。它可以正常工作。无需设置代理。我也没有特权,因为我是由普通用户运行的。

    try {
        URL url = new URL("http://money.cnn.com/2013/06/07/technology/security/page-zuckerberg-spying/index.html");
        URLConnection con = url.openConnection();
        InputStream in = con.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();
        while (line != null) {
            sb.append(line);
            line = br.readLine();
        }
        System.out.print(sb.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }

【讨论】:

  • 然而,这段代码对我没有任何改变。一旦我到达“con.getInputStream()”,我就会得到异常。在我看来,这证实了我们的系统中存在配置差异导致此问题。
  • 你能在控制台运行 - wget money.cnn.com/2013/06/07/technology/security/… 吗? index.html 中有什么?
  • 完美下载没有问题
  • 我建议再采取 2 项措施 - 检查库是否是最新的,并且您在 CLASSPATH 中没有旧库,第二个是使用 tcpdump 或 wireshark 等网络分析器(更好)来查看网络层发生了什么。您也可以在本地运行 Web 服务器并尝试本地连接(看看数据包有什么区别)
猜你喜欢
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
相关资源
最近更新 更多