gpt4 book ai didi

Java:HttpComponents 从特定 URL 的输入流获取垃圾响应

转载 作者:行者123 更新时间:2023-12-01 19:14:43 26 4
gpt4 key购买 nike

我目前正在尝试让 HttpComponents 发送 HttpRequest 并检索响应。在大多数 URL 上,这都可以正常工作,但是当我尝试获取 phpBB 论坛的 URL 即 http://www.forum.animenokami.com 时,客户端需要更多时间,并且响应实体多次包含段落,导致 html 文件损坏。

例如,元标记包含六次。由于许多其他 URL 都可以工作,我无法弄清楚我做错了什么。该页面在已知浏览器中可以正常工作,因此这对他们来说不是问题。

这是我用来发送和接收的代码。

        URI uri1 = new URI("http://www.forum.animenokami.com");
HttpGet get = new HttpGet(uri1);
get.setHeader(new BasicHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0"));
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(get);
HttpEntity ent = response.getEntity();
InputStream is = ent.getContent();
BufferedInputStream bis = new BufferedInputStream(is);
byte[] tmp = new byte[2048];
int l;
String ret = "";
while ((l = bis.read(tmp)) != -1){
ret += new String(tmp);
}

希望你能帮助我。如果您需要更多信息,我会尽力尽快提供。

最佳答案

此代码完全损坏:

String ret = "";
while ((l = bis.read(tmp)) != -1){
ret += new String(tmp);
}

三件事:

  • 这会在每次迭代时将整个缓冲区转换为字符串,无论读取了多少数据。 (我怀疑这就是您的案例中实际出现的问题。)
  • 它使用默认的平台编码,这几乎不是一个好主意。
  • 它在循环中使用字符串连接,这会导致性能不佳。

幸运的是,您可以使用 EntityUtils 轻松避免所有这些情况。 :

String text = EntityUtils.toString(ent);

这将使用响应中指定的适当字符编码(如果有),否则使用 ISO-8859-1。 (还有另一个重载,如果未指定,它允许您指定要使用的字符编码。)

了解原始代码有什么问题是值得的,而不是只是用更好的代码替换它,这样您就不会在其他情况下犯同样的错误。

关于Java:HttpComponents 从特定 URL 的输入流获取垃圾响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214816/

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