가끔 몇몇 서버에 의해 호스팅되는 이미지들은 요청 헤더의
Referer
를 보고 원하지 않는 경로로부터 링크된 경우
차단하는 경우가 있습니다. 이 도메인은 그러한 차단을 우회하기 위해
사용됩니다.
http://imgproxy.dahlia.kr/image.php
위 URL로 다음 쿼리 인자들과 함께 GET
요청을 하면
됩니다. 정확히는, 요청을 직접하는 것이 아니라 URL을 만들어내서
<img>
태그의 src
속성에 넣으면
됩니다.
url
(필수)sig
(필수)key
(필수)referrer
(선택)Referer
헤더를 확인하는 대부분의 서버들은
Referer
가 주어지지 않으면 이미지를 잘 보여줍니다.
하지만 특정한 Referer
가 아니면 아예 이미지를
보여주지 않는 서비스도 가끔 있는데, 그런 서비스의 차단을
우회하기 위해 특정한 Referer
주소를 지정할 수
있습니다. 주어지지 않을 경우 Referer
를 아예
보내지 않습니다. (주의!: 인자명은
referer
가 아니라
referrer
입니다. 인자명의
r
갯수에 주의하세요.)cookie[name]
(선택)cookie[fruit]=apple&cookie[color]=red
라고
전달할 경우 실제 서버에 전달되는 쿠키 헤더는 Cookie:
fruit=apple; color=red
가 됩니다.요청에 사용할 서명(sig
)을 만들기 위해서는 우선
키 발급을 받아야 합니다. 키 발급을 신청하면
한 쌍의 키를 받게 되는데, 공개 키와 비밀
키입니다.
key
에
들어갑니다.서명은 SHA-256 알고리즘을 사용하여 HMAC으로 해시된 URL 문자열입니다. 이때 HMAC 키로 사용되는 것이 바로 비밀 키입니다.
sig(url) = hmac-sha256(private-key, url)
import hmac
import hashlib
import urllib
URL = 'http://imgproxy.dahlia.kr/image.php'
KEY = 'YourPublicKeyGoesHere'
SECRET_KEY = 'YourSecretKeyGoesHere'
def sign(url):
hash = hmac.new(SECRET_KEY, url, hashlib.sha256)
return hash.hexdigest()
def url(url):
query = {'url': url, 'key': KEY, 'sig': sign(url)}
return URL + '?' + urllib.urlencode(query)
define('IMGPROXY_URL', 'http://imgproxy.dahlia.kr/image.php');
define('IMGPROXY_KEY', 'YourPublicKeyGoesHere');
define('IMGPROXY_SECRET_KEY', 'YourSecretKeyGoesHere');
function imgproxy_sign($url) {
return hash_hmac('sha256', $url, IMGPROXY_SECRET_KEY);
}
function imgproxy_url($url) {
$query = array('url' => $url,
'key' => IMGPROXY_KEY,
'sig' => imgproxy_sign($url));
return IMGPROXY_URL . '?' . http_build_query($query)
}
require 'openssl'
require 'cgi'
module ImgProxy
URL = 'http://imgproxy.dahlia.kr/image.php'
KEY = 'YourPublicKeyGoesHere'
SECRET_KEY = 'YourSecretKeyGoesHere'
def self.sign(url)
digest = OpenSSL::Digest.new('sha256')
OpenSSL::HMAC.hexdigest(digest, SECRET_KEY, url)
end
def self.url(url)
%{#{URL}?url=#{CGI.escape(url)}&key=#{KEY}&sig=#{sign(url)}}
end
end