如何直接获取图像?

时间:2010-11-24 04:20:15

标签: android-image

Follwing网页包含轻量级成人内容。如果您不想要,请不要点击链接。

  1. 转到:http://www.hqasians.com/tgp/bigasiantits/MaiNishida/at.htm
  2. 你可以看到几个拇指图像。
  3. 点击其中一个。你可以看到大图。
  4. 查看当前页面网址。它会像~~~~~~~~~~~~~~~~ / tgp / bigasiantits / MaiNishida / images / 01.jpg
  5. 您可以通过更改整个网址的最后一个.jpg名称来了解如何访问其他图片
  6. 将01.jpg改为02.jpg然后输入。
  7. 但是,你会遇到网站的主页而不是02.jpg。
  8. 这种安全方式阻止该网站的直接访问吗?

    是否有任何解决方法直接获取图像?


    以下是我的代码。

    InputStream bmis;

    bmis = new URL(params [0])。openStream();

    最终可绘制图像=

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

    if(image!= null)

    {

    activity.setContentView(imageSwitcher);    
    
    imageSwitcher.setImageDrawable(image);
    

    }

2 个答案:

答案 0 :(得分:1)

我只是在这里猜测,但我认为这个网站的作用是检查HTTP请求标题中的“Referer”字段,以检查请求是来自网站内还是来自外部。

这不是阻止直接访问的安全方法。事实上,有一种解决方法,但我不认为网站规则允许我在这里写,所以,你必须弄清楚自己。

答案 1 :(得分: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#?