首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >套接字使HTML响应不能工作

套接字使HTML响应不能工作
EN

Stack Overflow用户
提问于 2015-10-23 20:42:59
回答 3查看 77关注 0票数 1

我正在尝试获取Www.javaworld.com/blog的html,但它不起作用。我试着查询谷歌,这是可行的。GET请求可以工作,但是缓冲的读取器似乎停留在String str = br.readLine();上,我能做什么?

这是我的代码:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class GetAllHtml {
    public static void main(String[] args){
        try {

            Socket s = new Socket("javaworld.com",80);
            PrintStream ps = new PrintStream(s.getOutputStream());
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));

            ps.print("GET /blogsHTTP/1.0\r\n");
            ps.print("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n");
            ps.flush();

            String html = "";
            String str = br.readLine();

            while(str != null){
                html += str;
                str = br.readLine();
                System.out.println(str);
            }



            s.close();

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

提前感谢!

FYI,当我运行这段代码时,我得到了以下结果:

代码语言:javascript
复制
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /blogsHTTP/1.0 was not found on this server.</p>
</body></html>
null

编辑:现在它没有卡在readLine()(多亏了EJP),但是它返回404 not。发生什么事了呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-30 04:25:33

下面这句话对我有用

代码语言:javascript
复制
        ps.print("GET /blogs HTTP/1.0\r\n");
        ps.print("Host: www.javaworld.com\r\n");
        ps.print("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n");
        ps.print("\r\n");
        ps.flush();

1)在/blogs和HTTP1.0之间添加了一个空格(当您发布问题时可能是一个错误)

2)增加了“主机”标题。每当单个This服务器承载多个网站(共享托管)时,都需要此标头。这对谷歌来说不是个问题,因为他们不和其他网站共享服务器。

3)在请求结束时添加了一个最终\r\n。规范要求在请求结束时使用空行。Google使用它自己的自定义web服务器实现,它可以容忍缺少的新行。Javaworld.com,使用Apache服务器,这是比较严格的。

顺便说一下,您得到的响应是301重定向。使用www.javaworld.com,而不是javaworld.com来获取网页的实际HTML。不管怎样,使用我给您的三个编辑,您的BufferedReader()都不会挂起。

票数 1
EN

Stack Overflow用户

发布于 2015-10-23 20:46:51

你试过在这一行上加一个空格吗?

代码语言:javascript
复制
ps.print("GET /blogsHTTP/1.0\r\n");

我建议博客后面有一个空间:

代码语言:javascript
复制
ps.print("GET /blogs HTTP/1.0\r\n");
票数 1
EN

Stack Overflow用户

发布于 2015-10-23 20:52:35

  1. HTTP/1.0之前缺少空格
  2. 缺少主机:行
  3. 在标题的末尾缺少\r\n (空行)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33311082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档