2007年02月14日 19:00 [Edit]

perl - LWPあれこれ

camel

すでに多くの指摘があるとおり、GETLWPの付属コマンドです。

ウノウラボ Unoh Labs: ウェブアプリ開発を助けるGETコマンドを使ってハックしてみよう!!
jokagiは何年か前に偶然見つけたGETというコマンド(HEADもよく使う)を使用していますので,このコマンドの紹介と超簡単なハックをひとつ紹介したいと思います.

動作環境にインストールされているCPANパッケージの具合によってはhttpsが使えない(ぽい)

GETに限らずLWPでSSLを使うには、Crypt::SSLeayインストールすればOKです。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html
                 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                 "DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>PAUSE: menu</title>
<link rel="shortcut icon" href="/pause/pause_favicon.jpg" type="image/jpeg" />
<link rel="stylesheet" type="text/css" href="/pause/pause.css" title="pause"/>
</head><body bgcolor="white" link="#0000CC" vlink="#0000BB"
 alink="#FF0000" text="#000000"><table width="100%" border="0"
 cellpadding="0" cellspacing="0"><tr><td valign="middle"><a href="authenquery"><img src="/pause/pause2.jpg"
 border="0" alt="PAUSE Logo"
 width="177" height="43" align="left" /></a></td><td nowrap="nowrap"><h4
Locationなどで別ページに飛ばせる処理はリダイレクト先の情報(コンテンツ)が出力される

こちらは-Sオプションをつけて実行するだけで表示されるようになります。

% GET -S http://www.dan.co.jp/~dankogai/nonexistent | head
GET http://www.dan.co.jp/~dankogai/nonexistent --> 302 Found
GET http://blog.livedoor.jp/dankogai/ --> 200 OK
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<META name="verify-v1" content="Uxmj8tnJj+ZPANUvVbU+R32ms/SxLAWtslEspS7iqIE=" />
<link rel="shortcut icon" href="/dankogai/favicon.ico" />
<link rel="stylesheet" href="http://blog.livedoor.jp/dankogai/site.css" type="text/css" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://blog.livedoor.jp/dankogai/index.rdf" />
<link rel="alternate" type="application/atom+xml" title="Atom" href="http://blog.livedoor.jp/dankogai/atom.xml" />
odz buffer - GET と lwp-request
で、両方とも LWP インストール時にコマンドをインストールするかどうか聞いてくるのだが、lwp-request, lwp-mirror, lwp-rget, lwp-download はデフォルト yes、GET, HEAD, POST に関してはデフォルト no になっているので、何も考えずに ENTER を連打すると GET がないなんてことになったりする。

これ、実はOS X対策です。結構被害多いのですよ。

ひおにっき(2007-01-15)
LWPのHEAD(1)でうわがきされちゃった><。なんでデスクトップOSは大文字小文字区別しないの〜;

このとおり、ひおさんクラスのPerl Hackerでも、OS Xのことを知ってないところっといってしまいます。

何が起きたかを解説すると、LWPはインストール時に各コマンドをperl本体と同じディレクトリーにインストールしようとします。perlが/usr/binにインストールされていたら、当然HEAD/usr/bin/HEAD。ところがOS XのデフォルトのファイルシステムであるHFS+では、ファイル名はcase insensitive。/usr/bin/headを上書きしちゃうわけです。

本当はLWPの方で、インストール先のHEADを見るのが一番いいのですが、作者のGisle Aasも忙しい人ですし、今のところちょっとtuitな解決法のままになっているわけです。

まあ解決法は沢山あるわけですが、一番いいのは、/usr/local/bin/perlをあらかじめ作成して、perl worldとdarwin worldを分けておく事でしょう。詳しい方法は、

あたりをご覧下さい。

あと、上書きしちゃった/usr/bin/headを元に戻す方法ですが、一番確実かつライセンス違反などもありえないのは、インストールディスクからコピーしてしまう方法でしょう。幸いにもインストーラーそのものが/usr/bin/headを必要とするらしく、パッケージを解凍したりする必要はありません。インストールディスクが/Volumes/Mac OS X Install Disc 1にマウントされているとして、

/bin/cp -p '/Volumes/Mac OS X Install Disc 1/usr/bin/head' /usr/bin

でOKのはずです。

Dan the Frequent User Thereof


この記事へのトラックバックURL

この記事へのトラックバック
気がつかなかった。 bulknews.typepad.com: Mac OS X Security Update 2009-001 might break your Perl (CPAN)A couple of my friends on IRC have told me this, and since I'm using 10.4.11 I couldn't verify, but the latest Mac OS X Security Update 2009-001 ...
perl - Mac OS X - perlをDIYする【404 Blog Not Found】at 2009年02月13日 16:15
http://blog.livedoor.jp/dankogai/archives/50764262.html いい記念になった. 勉強になりました.ありがとうございます. というかHFS+でもやっぱりcase-insentiveなんすねー 主にデスクトップ用途ではやむなし.
[Neta] dankogaiにチェクられた!!【よくきたはてダ】at 2007年02月15日 11:15
この記事へのコメント
Anonymous the Type Checkerさん、
今見たのですが、一応閉じてました。どうしてだろ。
念のため再構築かけておきました。
Dan the Typo Regenerator
Posted by at 2007年02月15日 16:23
弾さん、こんどは同じところのaタグが閉じてないですw
Posted by Anonymous the Type Checker at 2007年02月15日 13:58
Anonymous the Typo Checkerさん、
今度こそ直ってると思います。ありがとうございました。
Dan the Typo Generator
Posted by at 2007年02月15日 11:49
Crypt::SSLeayのところ、まだcodeタグ閉じ忘れてますね。
Posted by Anonymous the Typo Checker at 2007年02月15日 09:34
Anonymous the Typo Checkerさん、
ありがとうございました。
Dan the Typo Generator
Posted by at 2007年02月14日 23:31
Crypt::SSLeayのところ、codeタグが閉じてないです。http://search.cpan.org/src/NWCLARK/perl-5.8.8/README.macosxのリンクも変になってます。
Posted by Anonymous the Typo Checker at 2007年02月14日 21:58