【问题标题】:Why can I only get the HTML for the homepage of websites and not others?为什么我只能获取网站主页的 HTML 而不能获取其他网站的主页?
【发布时间】:2010-12-05 13:00:01
【问题描述】:

我正在编写一个连接到网站并返回 HTML 的 Java 程序,但由于某种原因我遇到了问题。现在我只能访问该网站,如果我这样做了

 //example     String host = "www.google.com"

但是如果我想访问一个更复杂的 URL,我会得到一个 UnknownHostException。 起初我认为这可能与它无法识别 URL 中的某些字符有关,但我不确定。例如,这是我尝试访问的 URL 之一。

host ="http://www.cyberspacei.com/englishwiz/library/name/etymology_of_first_names.htm";
int port = 80;
Socket s = new Socket(host,port)

....等

除了 UnknownHostException 之外,它不会返回任何东西。

有人请帮帮我!!!

【问题讨论】:

    标签: java html html-parsing


    【解决方案1】:

    我不是 Java 领域的专家,但我知道出了什么问题。

    首先,主机变量应该只包含 URL 的主机。

    网址http://www.cyberspacei.com/englishwiz/library/name/etymology_of_first_names.htm的宿主其实是'cyberspacei.com'

    所以你连接到主机,然后发送 HTTP 标头来请求你正在寻找的页面。

    GET /englishwiz/library/name/etymology_of_first_names.htm HTTP/1.0
    Host: cyberspacei.com
    Accept: */*
    Connection: Close
    

    某些网页可能需要User-AgentReferer 标头才能工作。所以适当地添加字段。

    【讨论】:

    • 谢谢,这个答案很有帮助,我可以在几分钟内解决我的问题...感谢您的帮助
    【解决方案2】:

    @ONi 就在这里。您正在使用 Socket() 类,这意味着您正在使用原始套接字并且您想要编写自己的 HTTP/Web 服务器请求。您需要更像 URL 类的东西,因为该类“理解”HTTP 请求,并且只为您提供网站的内容。

    这就像从您的计算机(URL 类)打印和阅读电子邮件与将以太网线插入嘴里并尝试用舌头解读信号之间的区别。 Socket() 类对于你正在做的事情来说太低级了。

    【讨论】:

      【解决方案3】:

      它失败了,因为你被问到一个主机名,而不是你输入的那个 URL,如果你想要那个 URL 中的文档,你需要使用 URL 类

      URL url = new URL("http://www.thesite.com/thefile.html");
      Object doc = url.getContent();
      

      当然,您需要将“Object doc”替换为准备缓存该内容的文件。

      【讨论】:

        【解决方案4】:

        Socket 对象的“host”参数指定要连接到网络(互联网)上的哪台机器。这与 Web 浏览器中使用的 URI 不同,后者包括协议、服务器以及所请求文件或对象的目录结构。

        Socket s = new Socket("www.cyberspacei.com", "80");将为该机器上运行的网络服务器打开一个新的原始套接字,但随后将由您通过该套接字协商 HTTP 协议并请求“/englishwiz/library/name/etymology_of_first_names.htm”

        只要您不需要对 http 流的原始访问权限,使用 HttpClient 之类的库就可以省去一些麻烦。

        http://hc.apache.org/httpclient-3.x/index.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-03
          • 2021-08-06
          • 1970-01-01
          • 1970-01-01
          • 2016-06-02
          • 1970-01-01
          • 1970-01-01
          • 2019-02-09
          相关资源
          最近更新 更多