我正在编写一个连接到网站的java程序,它返回HTML,由于某些原因我遇到了问题。现在我只能访问该网站
//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之外不会返回任何内容。
有人请帮助我!!!
答案 0 :(得分:5)
它失败了,因为您被问及主机名,而不是您输入的URL,如果您想要该URL中的文档,则需要使用URL类
URL url = new URL("http://www.thesite.com/thefile.html");
Object doc = url.getContent();
当然,您需要将“Object doc”替换为准备缓存该内容的文件。
答案 1 :(得分:4)
Socket对象的“host”参数指定在网络(Internet)上连接的计算机。这与Web浏览器中使用的URI不同,后者包括协议,服务器以及所请求的文件或对象的目录结构。
Socket s = new Socket(“www.cyberspacei.com”,“80”);将打开一个新的原始套接字到该机器上运行的网络服务器,但是由你决定通过该套接字协商HTTP协议并请求“/englishwiz/library/name/etymology_of_first_names.htm”
你可以通过使用像HttpClient这样的库来节省一些麻烦,只要你不需要对http流的原始访问,就可以从http协商中获得大量的工作。
答案 2 :(得分:2)
我不是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-Agent
或Referer
标题才能生效。所以适当添加字段。
答案 3 :(得分:1)
@ONi就在这里。您正在使用Socket()类,这意味着您正在使用原始套接字,并且您希望编写自己的HTTP / Web服务器请求。您需要更像URL类的东西,因为该类“理解”HTTP请求并且只是为您提供网站的内容。
这就像打印输出和输出之间的区别从您的计算机上读取电子邮件(URL类),而不是将以太网线插入口中并尝试用舌头破译信号。对于你正在做的事情,Socket()类太低了。