2009-10-10 58 views
1

我正在写一个连接到网站的java程序,它返回HTML,出于某种原因,我遇到了问题。现在我只能够访问的网站,如果我做为什么我只能获取网站主页的HTML而不是其他网页?

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

,但如果我要访问一个URL,它是任何更复杂然后我得到一个UnknownHostException。 起初我认为它可能与它没有识别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) 

....等

,它不会返回任何东西,但一个UnknownHostException。

有人请帮助我!

回答

2

我不是用Java领域的专家,但我知道自己错在哪里。

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

的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头工作。所以请适当添加字段。

+0

谢谢,这个答案是非常有帮助的,我能够在几分钟内解决我的问题...我感谢你的帮助 – TheJediCowboy 2009-10-10 20:22:31

+0

没有问题的^^ – mauris 2009-10-11 01:27:18

5

它是失败的,因为你正在询问一个主机名,而不是像你进入,如果你想在URL中的文件,你需要使用URL类

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

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

4

Socket对象的“host”参数指定要在网络(Internet)上连接的机器。这与Web浏览器中使用的URI不同,后者包括协议,服务器和请求的文件或对象的目录结构。套接字s =新套接字(“www.cyberspacei.com”,“80”);将打开一个新的原始套接字到该机器上运行的网络服务器,但它将由您通过该套接字协商HTTP协议并请求“/englishwiz/library/name/etymology_of_first_names.htm”

您可能会保存通过使用诸如HttpClient这样的库来解决一些问题,只要你不需要对http流进行原始访问,就可以从http协商中完成大量工作。

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

1

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

这就像打印出&从您的计算机(URL类)读取电子邮件与将以太网线插入口中并试图用舌头破译信号之间的差异。 Socket()类对于你正在做的事来说太低级了。

相关问题