Как получить изображение напрямую? - PullRequest
0 голосов
/ 24 ноября 2010

Follwing веб-страница включает в себя легкое содержание для взрослых.Пожалуйста, не нажимайте на ссылку, если она вам не нужна.

  1. перейдите по ссылке: http://www.hqasians.com/tgp/bigasiantits/MaiNishida/at.htm
  2. вы можете увидеть несколько изображений большого пальца.
  3. щелкните по одному из них.Вы можете увидеть большое изображение.
  4. Проверьте URL текущей страницы.Это будет как ~~~~~~~~~~~~~~~~ / tgp / bigasiantits / MaiNishida / images / 01.jpg
  5. , вы можете узнать, как получить доступ к другому изображению, изменив последнее.jpg имя всего URL
  6. измените 01.jpg на 02.jpg и введите.
  7. Но вы увидите главную страницу сайта, а не 02.jpg.

Это безопасный способ заблокировать прямой доступ с этого сайта?

Есть ли способ обхода, чтобы получить изображение напрямую?


Ниже приведены мои коды.

InputStream bmis;

bmis = новый URL (params [0]). OpenStream ();

final Рисуемое изображение =

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

if (image! = Null)

{

activity.setContentView(imageSwitcher);    

imageSwitcher.setImageDrawable(image);

}

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Я только догадываюсь здесь, но я думаю, что этот сайт проверяет поле «Referer» в заголовке HTTP-запроса, чтобы проверить, поступил ли запрос изнутри сайта или извне.

Это не безопасный способ заблокировать прямой доступ.На самом деле, есть обходной путь, но я не думаю, что правила сайта позволяют мне писать это здесь, поэтому вам придется самим разобраться.

0 голосов
/ 24 ноября 2010

Это из-за Реферера.Чтобы открыть картинку, вам нужно перейти по этой главной странице.

Извините, я не уверен, как использовать 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Метод получен здесь: Как сохранить поток в файл в C #?

...