1

特定のWebサイトのHTMLソースコードをダウンロードし、それを同じWebサイトから以前にダウンロードしたものと比較して、変更が発生したかどうかを確認するサービスがあります。

昨日私が抱えていた問題:私は公共の場で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 を使用して Web サイトにアクセスし、証明書の身元を確認します。

于 2012-10-10T10:04:41.640 に答える