如何在Android中获取网页内容?

时间:2014-03-04 11:17:15

标签: android webpage

我在Android应用中获取网页内容时遇到问题。我想阅读这个地址https://szr.szczecin.pl/utms/data/layers/VMSPublic的内容。

起初我尝试使用此代码在Java中执行此操作:

public class Main {

    public static void main(String[] args) {

        String https_url = "https://szr.szczecin.pl/utms/data/layers/VMSPublic";
        URL url;
        try {

            url = new URL(https_url);
            HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
            print_content(con);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void print_content(HttpsURLConnection con) {
        if (con != null) {

            try {

                System.out.println("****** Content of the URL ********");
                BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));

                String input;

                while ((input = br.readLine()) != null) {
                    System.out.println(input);
                }
                br.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }

}

我从该网页下载并安装了证书后,工作正常。我怎样才能在Android中做同样的事情?我在Android中尝试过HTTPSURLConnection,但它只返回网页的地址。当我尝试HTTPURLConnection时,它向我提供了文档被移动的信息(状态302)。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下代码:

 public static String getResponseFromUrl(String url) {
        HttpClient httpclient = new DefaultHttpClient(); // Create HTTP Client
        HttpGet httpget = new HttpGet(URL); // Set the action you want to do
        HttpResponse response = httpclient.execute(httpget); // Executeit
        HttpEntity entity = response.getEntity(); 
        InputStream is = entity.getContent(); // Create an InputStream with the response
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null)
            sb.append(line);

        String resString = sb.toString(); 

        is.close();
        return  resString; 
        }

答案 1 :(得分:2)

您是否尝试在您的应用中将目标sdk设置为23,这是使用Apache HttpClient进行所有网络相关操作?如果是的话,这是一个坏消息。 Android 6.0(API Level 23)版本删除了对Apache HTTP客户端的支持。因此,您不能直接在API 23中使用此库。但有一种方法可以使用它。在build.gradle文件中添加useLibrary'org.apache.http.legacy',如下所示 -

android {
    useLibrary 'org.apache.http.legacy'
}

如果这不起作用,您可以应用以下黑客 -

- 复制org.apache.http.legacy.jar,它位于/ SDK / android-23 / Android SDK目录的可选路径中,位于项目的app / libs文件夹中。

- 现在在build.gradle文件的dependencies {}部分中添加编译文件('libs / org.apache.http.legacy.jar')。