【问题标题】:Java HttpURLConnection to get all content include css, img and so on [duplicate]Java HttpURLConnection 获取所有内容包括css、img等[重复]
【发布时间】:2012-10-24 08:01:18
【问题描述】:

我的要求是做 web 应用程序来获取目标内容,并且必须使用 HttpURLConnection 添加请求标头。

我用这个代码

    try{
        String urlStr = "http://test/STAM/Login";

        url = new URL(urlStr);
        urlconn = (HttpURLConnection)url.openConnection();
        urlconn.setRequestProperty("Accept-Language","en-us,en;q=0.5");
        urlconn.setRequestProperty("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        urlconn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16");

        urlconn.connect();
        //read the result from the server
        rd  = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
        sb = new StringBuilder();  
        while ((line = rd.readLine()) != null)
        {
            sb.append(line + '\n');
        }

        out.println(sb.toString());

   } catch(Exception e) {
        e.printStackTrace();
   } finally {
   //close the connection, set all objects to null
        urlconn.disconnect();
        rd = null;
        sb = null;
        wr = null;
        urlconn = null;
   }

结果是: 我的代码将仅获取源内容,但无法获取 css、图像文件、javascript 等,因为它将从本地主机加载,例如“http://localhost:8080/test/img/test.gif”而不是“http: //test/STAM/img/test.gif"。如果我错了或者你有什么办法可以解决这个问题,请告诉我。

非常感谢。

【问题讨论】:

  • 我想使用 HttpURLConnection 查看目标网站的全部内容(文本、图像)。谢谢
  • 完整内容是什么意思?就像您在浏览器中看到的页面一样?
  • 你想要的是一个有多个 HttpURLConnection 的浏览器。连接仅用于检索对请求的响应。它不会解析 HTML 内容来发出图像/脚本/CSS 请求...
  • @ThomasJungblut 是的,我的要求是用户希望在我的页面中看到目标页面。

标签: java servlets header request httpurlconnection


【解决方案1】:

据我了解,您希望在获取 html 页面时获取页面中使用的所有资源 (css/js/images/...)。

您可能知道,HTML 是一种引用外部资源的标记语言。获取所有这些资源并呈现页面是 Web 浏览器的工作。如果你想拥有所有资源,那么你应该解析源内容以提取资源链接并单独获取它们。

如果您想重复使用原始位置的资源,您必须注意资源 URL 仍然可以从页面打开的位置访问。 (URL could be absolute or relative)

【讨论】:

    【解决方案2】:

    不要使用 HttpUrlConnection 来执行此操作。你最终会解析 html 文件来解决一个已经解决的问题。

    使用:HttpClient

    【讨论】:

      【解决方案3】:

      我已经在网络中使用 URLConnection 从任何网站获取 Html css 和 javascript 代码的来源,我在这里尝试使用 URL 和 URLConnection 和 InputStream 获取微软网站的代码。

      import java.io.BufferedInputStream;
      import java.io.IOExecption;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      import java.io.Reader;
      import java.net.MalformedURLExeption;
      import java.net.URL;
      import java.net.URLConnection;
      
      public class Main2{
          public static void main(String[] args) throws IOException{
              URL u = new URL("http://www.microsoft.com/");
              URLConnection uc = u.openConnection();
              InputStream is = uc.getInputStresm();
              InputStream buf = new BuffredInputStream(is);
              Reader r = new InputStreamReader(buf);
              int i;
              while((i = r.read()) != -1){
                  System.out.println((char)i);
              }
          }
      }
      

      或者试试下面的代码。

          URLConnection uc = new URL("http://www.google.com").openConnection();
          BufferedInputStream bis = new BufferedInputStream(uc.getInputStream());
          int i;
          while(( i == bis.read()) != -1){
              System.out.println((char)i);
          }
          bis.close();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 2011-01-18
        相关资源
        最近更新 更多