2010-01-06 2 views
10

Я хочу загрузить изображения с других сайтов, которые защищены hotlink. Я не хочу связывать эти изображения с моим сайтом. Я просто хотел их скачать.Как скачать изображения с защитой от ссылок?

+0

С Java? Просто исполняйте обычный танец «url.openConnection». Пока вы не проходите в заголовке 'Referer', вы должны получить изображение. – bobince

+1

(Чтобы уточнить, большая часть защиты hotlink разрешает соединения без «Referer» вообще, поскольку они являются необязательными в HTTP и, возможно, не присутствуют, они только блокируют настоящее «Referer», указывающее на сторонний сайт. некоторые блокираторы, которые * требуют, чтобы сайт-участник присутствовал в «Referer» (в этом случае вам нужно было бы добавить его вручную), но поскольку у этого есть много нежелательных побочных эффектов для сайта, это должно быть довольно редко .) – bobince

ответ

11

usual hotlink-protection method проверяет, соответствует ли "Referrer" HTTP Header доменное имя исходного сайта.

Вы можете легко обойти это, установив этот заголовок вручную, чтобы указать на страницу на веб-сайте.

7

Вам необходимо передать HTTP-адрес реферера. Вы можете сделать это с помощью Wget на большинстве систем UNIX следующим образом:

wget --referer=http://www.google.com/ http://www.google.com/intl/en_ALL/images/logo.gif 

Здесь сырой способ сделать это так, вы видите именно то, что происходит:

telnet google.com 80 
GET /intl/en_ALL/images/logo.gif HTTP/1.1 
REFERER: http://www.google.com/ 
HOST: www.google.com 
3

Вы можете скачать хотлинк защищенные изображения, используя следующий код:

URL url = new URL("http://www.somesite.com/picture.jpg"); 

URLConnection urlCon = url.openConnection(); 
urlConn.setRequestProperty("Referer", "http://www.somesite.com"); 
urlConn.connect(); 

InputStream urlStream = urlCon.getInputStream(); 

Image image = ImageIO.read(urlStream); 
0

Расширение Postman для Chrome позволяет создавать пользовательские HTTP-запросы. Я нашел изображение с заблокированной ссылкой, скопировал его url и ввел его в Postman, чтобы ПОЛУЧИТЬ.