0

以下のウェブページには軽度のアダルト コンテンツが含まれています。不要な方はリンクをクリックしないでください。

  1. に行く: http://www.hqasians.com/tgp/bigasiantits/MaiNishida/at.htm
  2. いくつかの親指の画像を見ることができます。
  3. それらの 1 つをクリックします。大きな画像が見られます。
  4. 現在のページの URL を確認します。~~~~~~~~~~~~~~~~/tgp/bigasiantits/MaiNishida/images/01.jpg のようになります。
  5. URL全体の最後の.jpg名を変更することで、別の画像にアクセスする方法を知ることができます
  6. 01.jpg を 02.jpg に変更して入力します。
  7. ただし、02.jpg ではなく、ウェブサイトのメイン ページが表示されます。

そのサイトからの直接アクセスをブロックするこのセキュリティ方法はありますか?

画像を直接取得する回避策はありますか?


以下は私のコードです。

InputStream bmis;

bmis = 新しい URL(params[0]).openStream();

最終的なドローアブル イメージ =

new BitmapDrawable(BitmapFactory.decodeStream(new FlushedInputStream(bmis)));

if(画像!=ヌル)

{

activity.setContentView(imageSwitcher);    

imageSwitcher.setImageDrawable(image);

}

4

2 に答える 2

1

ここは推測ですが、このサイトはHTTPリクエストヘッダーの「Referer」フィールドをチェックして、サイト内からのリクエストなのか、サイト外からのリクエストなのかをチェックしていると思います。

直接アクセスをブロックする安全な方法ではありません。実際、回避策はありますが、サイトの規則でここに書くことはできないと思いますので、自分で解決する必要があります。

于 2010-11-24T04:28:46.657 に答える
0

リファラーのせいです。画像を開くには、そのメイン ページから参照する必要があります。

Android の使い方がよくわかりませんが、C# コードは次のようになります。

   static void Main(string[] args)
    {
        for (int i = 1; i <= 15; i++)
        {
            HttpWebRequest request = 
                WebRequest.Create(
                    string.Format("http://www.hqasians.com/tgp/bigasiantits/MaiNishida/images/{0:00}.jpg", i)
                    ) as HttpWebRequest;
            request.Credentials = CredentialCache.DefaultCredentials;
            request.Referer = "http://www.hqasians.com/tgp/bigasiantits/MaiNishida/at.htm";
            request.Method = "POST";
            WebResponse response = request.GetResponse();
            string inputFile = string.Format("{0}.jpg", i);
            Console.WriteLine(response.ResponseUri.AbsoluteUri);
            using (Stream file = File.OpenWrite(inputFile))
            {
                CopyStream(response.GetResponseStream(), file);
            }
        }
    }

    /// <summary>
    /// Copies the contents of input to output. Doesn't close either stream.
    /// </summary>
    public static void CopyStream(Stream input, Stream output)
    {
        byte[] buffer = new byte[8 * 1024];
        int len;
        while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            output.Write(buffer, 0, len);
        }
    }

CopyStream メソッドはここから入手できます: How do I save a stream to a file in C#?

于 2010-11-24T04:49:53.687 に答える