1

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

我昨天遇到的问题:我在公共场所连接到 WiFi,我的服务开始下载代码,因为它没有显示没有连接。但是你首先必须在使用公共 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;
}
4

2 回答 2

1

您可以使用禁用重定向

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();
于 2012-10-10T10:10:34.573 回答
0

使用 SSL 访问网站并检查证书的身份。

于 2012-10-10T10:04:41.640 回答