Webページのダウンロード

30分プログラム、その390。rfc.httpを使ってWebページをダウンロードしてみる。
ホントはmixiのクローラを作ろうと思ったんだど、うまくログインできなかったのであきらめた。

あと、http://google.co.jpを表示しようとしたら、ループにおちいったんだけどgoogle.co.jpはそんなに邪悪なのだろうか。

$ gosh curl.scm http://google.co.jp/
*** HTTP-ERROR: redirection is looping via http://www.google.co.jp/
Stack Trace:
_______________________________________
  0  (> (length history) 20)
        At line 186 of "/opt/local/share/gauche/0.8.13/lib/rfc/http.scm"
  1  loop

  2  (http-get host path)
        At line 24 of "./2008-10-14-221418.scm"
  3  (get (cadr args))
        At line 28 of "./2008-10-14-221418.scm"

使い方

$ gosh curl.scm http://d.hatena.ne.jp/mzp/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
...

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
;;
;; 2008-10-14-221418.scm -
;;
;; Copyright(C) 2008 by mzp
;; Author: MIZUNO Hiroki / mzpppp at gmail dot com
;; http://howdyworld.org
;;
;; Timestamp: 2008/10/14 22:14:22
;;
;; This program is free software; you can redistribute it and/or
;; modify it under MIT Lincence.
;;

(use rfc.http)
(use rfc.uri)


(define (get url)
  (receive [_ _ host _ path _ _]
      (uri-parse url)
    (receive [_ _ body]
	(http-get host path)
      body)))

(define (main args)
  (print (get (cadr args))))