【发布时间】: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 爬行维基百科文章编写的。