android - 如何确定下载的 HTML 源代码来自特定网站?

标签 android html http wifi

我有一项服务可以下载某个网站的 HTML 源代码,然后将其与之前从同一网站下载的源代码进行比较,看看是否发生了任何变化。

我昨天遇到的问题:我在公共(public)场合连接到 WiFi,我的服务开始下载代码,因为它没有显示没有连接。但是在使用公共(public) WiFi 时你首先必须登录,所以它被重定向到他们的登录页面,我的服务下载了登录页面的 HTML 代码。

我怎样才能确定地得到我想要的站点的源代码?

这是源代码(顺便说一下,我将源代码转换为 md5 以便于比较,但这并不重要):

public class DownloadHandler{

public String getMd5(String url){
    HttpClient client = new DefaultHttpClient();

    HttpGet request = new HttpGet(url);

    HttpResponse response = null;

    try {
        response = client.execute(request);
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    InputStream in = null;
    try {
        in = response.getEntity().getContent();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    BufferedReader reader = new BufferedReader(new InputStreamReader(in));

    StringBuilder str = new StringBuilder();
    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            str.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    String HTML = str.toString();

    try {
        String md5 = stringToMd5(html);
        return md5;
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return null;
    }

}

public String stringToMd5(String s) throws NoSuchAlgorithmException {
    MessageDigest md5 = MessageDigest.getInstance("MD5");stringa
    md5.update(s.getBytes(), 0, s.length());
    String md5String = new BigInteger(1, md5.digest()).toString(16);
    return md5String;
}

以及检查连接的函数:

boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager
            .getActiveNetworkInfo();
    return activeNetworkInfo != null;
}

最佳答案

您可以使用

禁用重定向
HttpGet httpGet = new HttpGet("www.google.com");
HttpParams params = httpGet.getParams();
params.setParameter(ClientPNames.HANDLE_REDIRECTS, Boolean.FALSE);
httpGet.setParams(params);

但是你仍然应该检查应该是 200 的 http 状态码

HttpResponse httpResp = client.execute(response);
int code = httpResp.getStatusLine().getStatusCode();

关于android - 如何确定下载的 HTML 源代码来自特定网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12816108/

相关文章:

java - 在android中发现Handlers的这种奇怪的行为

alt 标签内的 HTML 代码

html - 我想将类用于输入 type=submit

c - 在 Web 服务器中显示默认页面的问题

python - 使用编解码器返回 HTML 时 View 中出现 Django FileNotFoundError

php - 大型 .zip 文件下载不完整

android - 如何在android中管理作业队列中的作业?

关于覆盖资源的 Android 库

android - 无法运行项目应用程序(Gradle 构建失败)

html - 如何为具有各种背景图像并在其上放置内容的布局正确构建 HTML?