Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我只能获取网站主页的HTML而不能获取其他网页的HTML?_Java_Html_Html Parsing - Fatal编程技术网

Java 为什么我只能获取网站主页的HTML而不能获取其他网页的HTML?

Java 为什么我只能获取网站主页的HTML而不能获取其他网页的HTML?,java,html,html-parsing,Java,Html,Html Parsing,我正在编写一个java程序,它连接到一个网站,并返回HTML,出于某种原因,我遇到了一些问题。现在,我只能访问该网站,如果我这样做 //example String host = "www.google.com" 但是如果我想访问一个更加复杂的URL,那么我会得到一个未知的hostexception。 起初我认为这可能与不识别URL中的某些字符有关,但我不确定。例如,这里有一个URL的Im试图访问 host ="http://www.cyberspacei.com/englishwi

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

 //example     String host = "www.google.com"
但是如果我想访问一个更加复杂的URL,那么我会得到一个未知的hostexception。 起初我认为这可能与不识别URL中的某些字符有关,但我不确定。例如,这里有一个URL的Im试图访问

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

它只会返回一个未知的异常


有人请帮帮我

它失败是因为询问您的是主机名,而不是您正在输入的URL,如果您希望该URL中包含文档,则需要使用URL类

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

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

失败是因为您被询问的是主机名,而不是像您输入的URL那样的URL。如果您希望文档位于该URL中,则需要使用URL类

URL url = new URL("http://www.thesite.com/thefile.html");
Object doc = url.getContent();
当然,您需要将“对象文档”替换为准备缓存该内容的文件。

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

插座s=新插座(“www.cyberspace.com”,“80”);将向在该计算机上运行的Web服务器打开一个新的原始套接字,但随后将由您通过该套接字协商HTTP协议,并请求“/englishwiz/library/name/ethysology_of_first_names.htm”

通过使用诸如HttpClient之类的库,您可能会省去一些麻烦,只要您不需要对http流进行原始访问,就可以从http协商中省去很多工作

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

插座s=新插座(“www.cyberspace.com”,“80”);将向在该计算机上运行的Web服务器打开一个新的原始套接字,但随后将由您通过该套接字协商HTTP协议,并请求“/englishwiz/library/name/ethysology_of_first_names.htm”

通过使用诸如HttpClient之类的库,您可能会省去一些麻烦,只要您不需要对http流进行原始访问,就可以从http协商中省去很多工作


我不是Java领域的专家,但我知道哪里出了问题

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

URL的主机
http://www.cyberspacei.com/englishwiz/library/name/etymology_of_first_names.htm
实际上是
'cyberspace.com'

因此,您连接到主机,然后发送HTTP头以请求您正在查找的页面

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

某些网页可能需要
用户代理
参考
标题才能工作。因此,适当地添加字段。

我不是Java领域的专家,但我知道哪里出了问题

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

URL的主机
http://www.cyberspacei.com/englishwiz/library/name/etymology_of_first_names.htm
实际上是
'cyberspace.com'

因此,您连接到主机,然后发送HTTP头以请求您正在查找的页面

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

某些网页可能需要
用户代理
参考
标题才能工作。因此,适当地添加字段。

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


这就像从你的电脑(URL类)打印和阅读电子邮件与把以太网线塞进嘴里并试图用舌头破译信号之间的区别。Socket()类对于您正在做的事情来说太低级了。

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


这就像从你的电脑(URL类)打印和阅读电子邮件与把以太网线塞进嘴里并试图用舌头破译信号之间的区别。Socket()类对于您正在做的事情来说太低级了。

谢谢,这个答案非常有用,我能在几分钟内解决我的问题…我感谢您的帮助谢谢,这个答案非常有用,我能在几分钟内解决我的问题…我感谢您的帮助