gpt4 book ai didi

java - 从 URL 连接 Java 读取

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:38:29 26 4
gpt4 key购买 nike

我正在尝试从 URL 连接中读取 html 代码。在一种情况下,我尝试读取的 html 文件在实际文档类型声明之前包含 5 个换行符。在这种情况下,输入读取器会抛出 EOF 异常。

URL pageUrl = 
new URL(
"http://www.nytimes.com/2011/03/15/sports/basketball/15nbaround.html"
);

URLConnection getConn = pageUrl.openConnection();
getConn.connect();
DataInputStream dis = new DataInputStream(getConn.getInputStream());
//some read method here

有人遇到过这样的问题吗?

URL pageUrl = new URL("http://www.nytimes.com/2011/03/15/sports/basketball/15nbaround.html");
URLConnection getConn = pageUrl.openConnection();
getConn.connect();
DataInputStream dis = new DataInputStream(getConn.getInputStream());
String urlData = "";
while ((urlData = dis.readUTF()) != null)
System.out.println(urlData);

//抛出异常

java.io.EOFException at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323) at java.io.DataInputStream.readUTF(DataInputStream.java:572) at java.io.DataInputStream.readUTF(DataInputStream.java:547)

在bufferedreader的情况下,它只是响应null,并不继续

pageUrl = new URL("http://www.nytimes.com/2011/03/15/sports/basketball/15nbaround.html");
URLConnection getConn = pageUrl.openConnection();
getConn.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(getConn.getInputStream()));
String urlData = "";
while(true)
urlData = br.readLine();
System.out.println(urlData);

输出空值

最佳答案

您正在使用 DataInputStream 读取未使用 DataOutputStream 编码的数据。检查记录的调用 DataInputStream#readUtf() 的行为; it first reads two bytes组成一个 16 位整数,表示后面包含 UTF 编码字符串的字节数。您从 HTTP 服务器读取的数据未以这种格式编码。

相反,HTTP 服务器发送以 ASCII 编码的 header ,根据 RFC 2616第 6.1 和 2.2 节。您需要将 header 作为文本读取,然后确定消息正文(“实体”)的编码方式。

关于java - 从 URL 连接 Java 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5371943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com