크로스도메인1 Articles

  1. 2009/01/16 PHP를 이용 실버라이트에서 rss 읽어오기

실버라이트를 이용하여 rss읽는것 자체는 굉장히 쉬운일이다. 그렇지만 다른 호스트의 rss을 읽는것은 쉽게 할수 없는 일이다. 이유인 즉은 실버라이트에서 크로스도메인 접속시 해당 도메인에 대한 권한파일을 확인후 권한이 없다거나 권한파일 자체가 없다면 접근을 할수가 없다. 우리 회사도 요즘들어 굉장히 많은 인젝션 공격이 들어오는 걸로 봐선 어떻게 보면 당연하다고 볼수는 있지만..... rss뿐만 아니라 이미지라던가 웹페이지 등등등 그 어떠한 자료도 권한이 없다면 순수 실버라이트만 가지고 사용할수 없게 된다.

그렇다면 뭐야?? 내가 원하는 것은 다른 도메인의 rss일뿐 내가 내블로그 rss를 받아봤자 뭐하겠냐구 ^^;; 그리고 난 a 라는 사이트의 이미지 잠깐 쓰고만 싶을 뿐인데 그사이트에서 얼씨구나 좋와요 하고 권한 파일을 만들어 줄리는 없을거잖아 ^^;; 그렇담 이렇게 이용할수 있지 않을까? 닷넷이라면 내 도메인에서 HttpWebRequest 객체를 이용해 내가 읽고 싶은 URL을 읽은 다음에 다시 뿌려준다면 도메인이 다른 사이트라도 내 도메인에서 뿌려주는것처럼 실버라이트런타임을 속일수 있게 되고 그럼 이용이 가능할 것이다.

그래서 난 당장 내 블로그에서 이용 가능하게 해보려고 시도 했다. 그런데 또하나의 문제점이 있었다. 내 블로그는 PHP 서비스로 이용되는 블로그이다. 그렇기 때문에 난 PHP용 HttpWebRequest 객체와 같은 것을 이용해 사용해야 한다 ^^; 그래서 찾아낸 것이 PHP용 WebAgent인 snoopy 라는 것을 찾았다. snoopy 클래스를 이용하면 손쉽게 내가 원하는 페이지를 읽어 올수 있다.  snoopy 의 소스는

http://snoopy.sourceforge.net/

여기서 다운 받을수 있다.

여기서 snoopy 클래스를 이용시 팁이라고 한다면 snoopy 클래스에서 agent 속성을 설정하는 부분이 있는데
Snoopy v1.2.4 이라고 설정이 되있다. 그런데 이렇게 agent속성이 설정되 있게되면 이용에 제한이 돼있는 사이트가 있다. 아마도 사이트 긁는 검색엔진이라던지 봇을 막기위해 차단이 되는데 agent 속성을 IE의 agent 값과 같게 한다면 접근이 불가능한 사이트라도 가능해 진다. 물론 100% 차단 해제된다는 장담은 못함!

이렇게 snoopy 클래스를 이용하여 크로스 도메인 문제를 해결하는 URL을 만들었다.
이렇게 http://mydomain/get.php?target=http://targetdomain/rss 페이지를 요청하면 http://targetdomain/rss 의rss를 마치 내 도메인에서 뿌려주는 것처럼.

소스보기

어설프지만 위와 같이 실버라이트 만들어 보았다. ^^; ㅎㅎ 해보니 왠만한 rss는 잘긁어 오는것 같다. 아래는 구현한 예제이다.



이상 rss 읽어오기 끗~~~~~~~


div>