Mechanize gem은 웹사이트로 요청을 보내고, 받은 페이지의 링크를 따라가고, 폼을 제출하는 동작을 간편하게 준다. Mechanize는 Cookie를 저장하고, redirect를 따라가며, 방문한 사이트 목록(history)을 가지고 있다. 웹사이트와 상호작용하는 클라이언트를 만들고 싶은 경우 mechanize는 좋은 선택이 될 것이다.
간단한 사용법은 다음과 같다.
- require 'rubygems'
- require 'mechanize'
- WWW::Mechanize.new do |agent|
agent.user_agent_alias = 'Windows IE 7'
page = agent.get("http://www.google.com")
page = page.form_with(:name => 'f') do |form|
form.q = "cat"
end.submit
page.search("a.l").each do |ele|
p ele.content
end
end
Mechanize의 Guilde와 Exampe 페이지를 읽어 보면 더 좋은 이해를 할 수 있다.
조금 더 자세히 알아보자.
페이지 가져오기
- page = agent.get(“http://www.site.com”)
혹은 header와 referer 같은 것들을 설정하고 싶다면,
- page = agent.get({:url => url, :params => params, :referer => referer, :headers => headers})
가져온 페이지의 content_type이 html일 경우에 page는 WWW::Mechanize::Page 객체이다. 이 Page 객체는 기본으로 nokogiri parser를 사용한다. 그래서 다음과 같이 css로 element를 선택할 수 있다.
- page.search(“#element_id”)
다른 parser를 사용하고 싶다면
- WWW::Mechanize.html_parser = Hpricot
form 제출하기
페이지의 모든 form은 다음과 같이 확인할 수 있다.
- page.forms
form의 제출은 다음과 같다.
- page.form_with(:name => “login”) do |form|
- form.action = “http://www.site.com/login”
- form.login = “id”
- form.passwd = “pass”
- end.submit
link, frame 따라가기
page의 link 목록은 다음과 같이 따라갈 수 있다.
- page.link_with(:text => “follow”).click
iframe이 사용되고 있는 경우 다음과 같이 iframe을 열 수 있다.
- page = page.iframes.first.click
파일의 저장
이미지 파일을 저장하고 싶으면
- file = agent.get("http://www.site.com/image/1.JPG")
page.save_as("image.jpg")
마지막으로 구글에서 이미지 검색을 한 후 이미지들을 저장하는 코드는 다음과 같다.
- WWW::Mechanize.new do |agent|
agent.user_agent_alias = 'Windows IE 7'
page = agent.get("http://images.google.co.kr/imghp")
page = page.form_with('f') do |form|
form.q = 'cat'
end.submit
page.links.each do |l|
next unless l.href =~ /imgurl=(.+?&)/
url = $1.chop
agent.get(url).save_as(File.basename(url))
end
end
'Ruby' 카테고리의 다른 글
| [Ruby] Gem 만들기 (0) | 2009/06/16 |
|---|---|
| [ruby] sms_client gem (0) | 2009/06/16 |
| [Ruby] mechanize gem을 이용해 웹사이트와 통신하기 (0) | 2009/06/16 |
| [ruby] RDOC 을 위한 주석 달기 (0) | 2009/02/23 |
| [Ruby] block expressions, 그리고 code block (0) | 2008/08/12 |
| [Ruby] or 와 || 의 차이 (0) | 2008/08/12 |
웹서비스 개발을 하다보면 HTTP 요청을 내맘대로 설정해서 보내고 싶을 때가 있다. GET 요청은 브라우져를 통해서 하면 간단히 보낼 수 있다. 그러나 POST 요청을 보낼 때는? HTTP Header의 정보를 조작해서 요청을 보내고 싶을 때는? 모두 간단하지 않다.
파이어폭스를 사용하고 있다면 Poster라는 부가기능을 이용해서 다양한 HTTP 요청을 만들 수 있다. 그리고 그 결과도 손쉽게 확인할 수 있다. 설치 및 사용방법도 아주 간단하다.
설치
파이어 폭스의 Poster 부가기능을 설치한다. 설치가 완료되면 파이어폭스의 하단에 Poster 아이콘이 보인다. 작아서 한눈에 찾아지지 않을 지도 모른다. 아마도 이것을 찾는 것이 이 부가기능을 사용하는데 있어서 가장 어려운 일일듯 싶다. 나머지는 그만큼 쉽다.
가운에 있는 P자 아이콘을 클릭하면 Poster의 창이 나타난다.
사용
사용법은 간단하다. 원하는 URL을 입력하고 Actions의 GET 옆의 Go를 누르면 Get 요청이 보내진다. 그리고 다음과 같은 결과를 얻는다.
주요기능
Request 창의 값들을 조절해 다양한 요청을 보낼 수 있다.
File 을 선택해서 파일 업로드 할 때의 요청을 만들 수 있다.
User Auth를 이용해 Basic Authentication 을 설정할 수도 있다.
Actions 탭에서는 HTTP method를 변경할 수 있다.
Header의 값을 변경할 수도 있고, 요청 파라미터를 설정해서 보낼 수도 있다.
그리고, 사용할 것만 같은 복잡한 설정이 있다면 설정을 저장할 수도 있다.
'그 밖에..' 카테고리의 다른 글
| Google APP Engine 사용하기 (1) | 2009/03/07 |
|---|---|
| NetBeans 유용한 팁들 몇 개 (0) | 2009/02/12 |
| 파이어 폭스 부가기능 Poster - HTTP 요청을 내맘대로. (2) | 2009/02/10 |
| [firefox] profile 이용하기 (0) | 2008/09/04 |
| [firefox] fireshot plugin (0) | 2008/05/28 |
| SSH key를 사용해서 로그인 자동화하기 (0) | 2008/05/05 |