BLOG main image
분류 전체보기 (239)
Rails (65)
Ruby (34)
이야기 (40)
스토리큐 (61)
그 밖에.. (30)
C# (6)
드리밍 인 코드
The note of Legendre
작은아이의 생각
agiletalk's me2DAY
[rails] Growl4Rails
美소년 ㅇㅅㅇ씨의 一日
마사키군의 생각
ayukawa's me2DAY
작은아이의 생각
agiletalk's me2DAY
63,404 Visitors up to today!
Today 9 hit, Yesterday 22 hit

 SUBSCRIBE

'HTTP'에 해당되는 글 2건
2009/06/16 10:56

Mechanize gem은 웹사이트로 요청을 보내고, 받은 페이지의 링크를 따라가고, 폼을 제출하는 동작을 간편하게 준다. Mechanize는 Cookie를 저장하고, redirect를 따라가며, 방문한 사이트 목록(history)을 가지고 있다. 웹사이트와 상호작용하는 클라이언트를 만들고 싶은 경우 mechanize는 좋은 선택이 될 것이다.

간단한 사용법은 다음과 같다.

  1. require 'rubygems'
  2. require 'mechanize'
  3. 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의 GuildeExampe 페이지를 읽어 보면 더 좋은 이해를 할 수 있다.

조금 더 자세히 알아보자.

페이지 가져오기
  1. page = agent.get(“http://www.site.com”)

혹은 header와 referer 같은 것들을 설정하고 싶다면,

  1. page = agent.get({:url => url, :params => params, :referer => referer, :headers => headers})

가져온 페이지의 content_type이 html일 경우에 page는 WWW::Mechanize::Page 객체이다. 이 Page 객체는 기본으로 nokogiri parser를 사용한다. 그래서 다음과 같이 css로 element를 선택할 수 있다.

  1. page.search(“#element_id”)

다른 parser를 사용하고 싶다면

  1. WWW::Mechanize.html_parser = Hpricot
form 제출하기

페이지의 모든 form은 다음과 같이 확인할 수 있다.

  1. page.forms

form의 제출은 다음과 같다.

  1. page.form_with(:name => “login”) do |form|
  2.   form.action = “http://www.site.com/login”
  3.   form.login = “id”
  4.   form.passwd = “pass”
  5. end.submit
link, frame 따라가기

page의 link 목록은 다음과 같이 따라갈 수 있다.

  1. page.link_with(:text => “follow”).click

iframe이 사용되고 있는 경우 다음과 같이 iframe을 열 수 있다.

  1. page = page.iframes.first.click
파일의 저장

이미지 파일을 저장하고 싶으면

  1. file = agent.get("http://www.site.com/image/1.JPG")
    page.save_as("image.jpg")

마지막으로 구글에서 이미지 검색을 한 후 이미지들을 저장하는 코드는 다음과 같다.

  1. 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
2009/02/10 15:07

웹서비스 개발을 하다보면 HTTP 요청을 내맘대로 설정해서 보내고 싶을 때가 있다. GET 요청은 브라우져를 통해서 하면 간단히 보낼 수 있다. 그러나 POST 요청을 보낼 때는? HTTP Header의 정보를 조작해서 요청을 보내고 싶을 때는? 모두 간단하지 않다.

파이어폭스를 사용하고 있다면 Poster라는 부가기능을 이용해서 다양한 HTTP 요청을 만들 수 있다. 그리고 그 결과도 손쉽게 확인할 수 있다. 설치 및 사용방법도 아주 간단하다.

설치

파이어 폭스의 Poster 부가기능을 설치한다. 설치가 완료되면 파이어폭스의 하단에 Poster 아이콘이 보인다. 작아서 한눈에 찾아지지 않을 지도 모른다. 아마도 이것을 찾는 것이 이 부가기능을 사용하는데 있어서 가장 어려운 일일듯 싶다. 나머지는 그만큼 쉽다.

clip_image001

가운에 있는 P자 아이콘을 클릭하면 Poster의 창이 나타난다.

clip_image001[8]

 

사용

사용법은 간단하다. 원하는 URL을 입력하고 Actions의 GET 옆의 Go를 누르면 Get 요청이 보내진다. 그리고 다음과 같은 결과를 얻는다.

clip_image001[10]

 

주요기능

Request 창의 값들을 조절해 다양한 요청을 보낼 수 있다.

File 을 선택해서 파일 업로드 할 때의 요청을 만들 수 있다.
User Auth를 이용해 Basic Authentication 을 설정할 수도 있다.
Actions 탭에서는 HTTP method를 변경할 수 있다.
Header의 값을 변경할 수도 있고, 요청 파라미터를 설정해서 보낼 수도 있다.
그리고, 사용할 것만 같은 복잡한 설정이 있다면 설정을 저장할 수도 있다.

prev"" #1 next