Java Android:提取html源代码

Java Android:提取html源代码,java,android,html,webview,Java,Android,Html,Webview,我正在尝试提取网站的源代码,我已经研究了一点,许多解决方案都指向使用HTTPClient和HTTPContext,但问题是我无法使用URL从中获取此源代码。我使用的网站是基于登录名的,无论您以谁的身份登录,它都会显示相同的URL(当然,要提取的信息会因用户而异)。因此,我想知道是否有一种方法可以直接从webview或类似的东西获取源代码。总之,我不能使用URL中介,因为它是统一的,基本上重定向到通用登录页面 对不起,如果我错过了什么;我是新来的。提前谢谢你的帮助 编辑: 我发现了一个不同的URL

我正在尝试提取网站的源代码,我已经研究了一点,许多解决方案都指向使用HTTPClient和HTTPContext,但问题是我无法使用URL从中获取此源代码。我使用的网站是基于登录名的,无论您以谁的身份登录,它都会显示相同的URL(当然,要提取的信息会因用户而异)。因此,我想知道是否有一种方法可以直接从webview或类似的东西获取源代码。总之,我不能使用URL中介,因为它是统一的,基本上重定向到通用登录页面

对不起,如果我错过了什么;我是新来的。提前谢谢你的帮助

编辑

我发现了一个不同的URL,每个用户的URL都不一样,但存在一个(其他)相关问题:
使用jsoup,我可以执行jsoup.connect(“http://www.stackoverflow.com/).get().html();(URL被替换为我试图访问的内容)这实际上获得了HTML源代码,但问题再次出现,当我尝试访问受用户/密码保护的网站时,它要求提供登录信息。我需要能够输入用户名和密码一次,基本上将其存储在某种临时东西(cookies/cache?)中,并保留该信息,以便jsoup在每次我基于某个URL请求源时停止查询登录凭据。我仍然找不到解决这个问题的方法…

如果我理解正确(如果我没有理解,请告诉我):

如果是受用户/密码保护的,您是否应该发出Http Post(这是您在浏览器中执行的操作)并从该Post获得响应?大概是这样的:

编辑:这是一个示例

我有一个页面看起来是这样的(它过于简化了,但仍然在这里):

这可能看起来有点奇怪,但我执行了一个重定向(302),在RCF中似乎有一个问题,因此需要进行一些小的工作

如果您没有在服务器端执行任何重定向,那么您可以忽略我检查302的部分

看看什么适合你

干杯,
尤金。

如果我理解正确(如果没有,请告诉我):

如果是受用户/密码保护的,您是否应该发出Http Post(这是您在浏览器中执行的操作)并从该Post获得响应?大概是这样的:

编辑:这是一个示例

我有一个页面看起来是这样的(它过于简化了,但仍然在这里):

这可能看起来有点奇怪,但我执行了一个重定向(302),在RCF中似乎有一个问题,因此需要进行一些小的工作

如果您没有在服务器端执行任何重定向,那么您可以忽略我检查302的部分

看看什么适合你

干杯, 尤金。

参见

或者检查示例代码

如何读取URL的内容

try{
        URL oracle = new URL("http://www.w3schools.com/html/html_tables.asp");
        URLConnection yc = oracle.openConnection();
        InputStream is = yc.getInputStream();
        String inputLine;
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                yc.getInputStream()));
        while ((inputLine = in.readLine()) != null) 
            System.out.println(inputLine);
        in.close();

        }catch(Exception ex){
            ex.printStackTrace();
        }

或者检查示例代码

如何读取URL的内容

try{
        URL oracle = new URL("http://www.w3schools.com/html/html_tables.asp");
        URLConnection yc = oracle.openConnection();
        InputStream is = yc.getInputStream();
        String inputLine;
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                yc.getInputStream()));
        while ((inputLine = in.readLine()) != null) 
            System.out.println(inputLine);
        in.close();

        }catch(Exception ex){
            ex.printStackTrace();
        }

我可能会因为早上的心情而反应迟钝,但你是如何解决答案中的这一部分的:“它显示相同的URL(当然,要提取的信息因用户而异)”。你所展示的只是简单地阅读URL的内容,我想你根本没有回答这个问题。是的,尤金,我完全同意。我知道如何阅读简单URL的内容,但这里的情况不同。我可能会因为早上的心情而变慢,但你如何解决答案中的这一部分:“它显示相同的URL?”(当然,要提取的信息因用户而异)。你所介绍的只是简单地阅读URL的内容,我想你根本没有回答这个问题。是的,尤金,我完全同意。我知道如何阅读简单URL的内容,但这里的情况不同。你的方法似乎是对的,但让我困惑。你能提供一些关于如何获取URL的示例代码吗考虑到这种情况,网站的html源代码?我将试用它并让您知道。感谢您的回复!这种方法对我来说非常混乱;对不起,我在这个主题上没有经验。我已经编辑了我的问题;您能看一下吗?这些类中的许多并没有出现在我的java IDE中(例如PostMethod)…您能提出一个原因吗?因为没有显示方法,这是因为Eclipse看不到它们。您是否在使用maven构建项目?如果不是,您应该查阅Eclipse文档,了解如何将类添加到类路径(右键单击项目-->构建路径…).jsoup是我没有使用过的东西,因此不能真正提出任何建议。您的方法似乎是正确的,但让我感到困惑。在这种情况下,您是否可以提供一些关于如何获取网站html源代码的示例代码?我将试用它并让您知道。感谢您的回复!此方法对我来说非常困惑;因此rry,我在这个主题上没有经验。我已经编辑了我的问题;你能看一下吗?这些类中的很多都没有出现在我的java IDE中(例如PostMethod)…您能提出一个原因吗?因为没有显示方法,这是因为Eclipse看不到它们。您是否在使用maven构建项目?如果不是,您应该查阅Eclipse文档,了解如何将类添加到类路径(右键单击项目-->构建路径…).jsoup是我没有使用过的东西,因此我不能真正提出任何建议。
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

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

        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod("http://localhost:20000/moika/moika/j_spring_security_check");
        postMethod.addParameter("j_username", "ACTUAL_USER");
        postMethod.addParameter("j_password", "ACTUAL_PASSWORD");

        try {
            int status = httpClient.executeMethod(postMethod);
            System.out.println("STATUS-->" + status);

            if(status == 302){
                Header header = postMethod.getResponseHeader("location");
                String location = header.getValue();
                System.out.println("HEADER_VALUE-->" + location);
                GetMethod getMethod = new GetMethod(location);
                httpClient.executeMethod(getMethod);
                String content = getMethod.getResponseBodyAsString();
                System.out.println("CONTENT-->" + content);
            }

            String contentInCaseOfNoRedirect = postMethod.getResponseBodyAsString();

        } catch (Exception exception){
            exception.printStackTrace();
        }
    }
}
try{
        URL oracle = new URL("http://www.w3schools.com/html/html_tables.asp");
        URLConnection yc = oracle.openConnection();
        InputStream is = yc.getInputStream();
        String inputLine;
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                yc.getInputStream()));
        while ((inputLine = in.readLine()) != null) 
            System.out.println(inputLine);
        in.close();

        }catch(Exception ex){
            ex.printStackTrace();
        }