prefabolic

123456789101112131415161718192021222324252627282930

それcur

投稿者:kalibora
投稿日時:2007-02-16 - 10:00:00
カテゴリー:Programming - トラックバック(DISALLOWED (TrackBack))-
ウノウラボ Unoh Labs: ウェブアプリ開発を助けるGETコマンドを使ってハックしてみよう!!

さてウェブアプリケーションの開発をしていると当然ですがブラウザーで画面の確認をしたりしますが,ブラウザーで確認をしているとキャッシュに悩んだり面倒くさいことが少なくありません.普通そういう時はtelnetなどで直接HTTPプロトコルでウェブサーバーと会話するわけですが面倒くさいですよね.
jokagiは何年か前に偶然見つけたGETというコマンド(HEADもよく使う)を使用していますので,このコマンドの紹介と超簡単なハックをひとつ紹介したいと思います.

GETコマンドはしらなんだー。
でも個人的にcurlを使うことが多いのでこの機会にまとめながらメモ

■インストール
FreeBSDなら
/usr/ports/ftp/curl
あたりから

■ヘルプ
$ curl --help

いっぱーい。
自分がよく使うものは
ここらへんにまとめ。

■普通にGET
$ curl '-#' 'http://www.yahoo.co.jp/' | head
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<!--京-->
<title>Yahoo! JAPAN</title>
<meta name="description" content="日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、など80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。">
<style type="text/css" media="all">
<!--
.spacer { line-height: 110%; }
.spacer1 {line-height: 115%; }

'-#' は変な進捗状況を表示したくないのでプログレスバーにしているだけ・・。
あれって消せないのかなぁ。

■APIをGETで叩く
$ curl '-#' 'http://api.photozou.jp/rest/photo_list_public?type=album&user_id=98953&album_id=224030' | head
<?xml version="1.0" encoding="UTF-8" ?>
<rsp stat="ok">
<info>
  <photo>
    <photo_id>2298762</photo_id>
    <user_id>98953</user_id>
    <album_id>224030</album_id>
    <type>jpg</type>
    <width>450</width>
    <height>337</height>
######################################################################## 100.0%% 

RESTなAPIならそのまま叩くだけ。

■レスポンスヘッダを見てみる
$ curl -I 'http://api.photozou.jp/rest/photo_list_public?type=album&user_id=98953&album_id=224030'
HTTP/1.1 200 OK
Date: Thu, 15 Feb 2007 16:20:59 GMT
Server: Apache
X-Powered-By: PHP/4.3.11
Content-Type: text/xml; charset=UTF-8

フォト蔵さんはPHP4なのだすなー。

■やり取りを詳しく!
$ curl '-#' -v 'http://api.photozou.jp/rest/photo_list_public?type=album&user_id=98953&album_id=224030' | head
* About to connect() to api.photozou.jp port 80 (#0)
*   Trying 124.32.224.107... connected
* Connected to api.photozou.jp (124.32.224.107) port 80 (#0)
> GET /rest/photo_list_public?type=album&user_id=98953&album_id=224030 HTTP/1.1
> User-Agent: curl/7.16.0 (i386-portbld-freebsd6.0) libcurl/7.16.0 OpenSSL/0.9.7e zlib/1.2.2
> Host: api.photozou.jp
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 15 Feb 2007 16:56:09 GMT
< Server: Apache
< X-Powered-By: PHP/4.3.11
< Content-Type: text/xml; charset=UTF-8
< Transfer-Encoding: chunked
{ [data not shown]
<?xml version="1.0" encoding="UTF-8" ?>
<rsp stat="ok">
<info>
  <photo>
    <photo_id>2298762</photo_id>
    <user_id>98953</user_id>
    <album_id>224030</album_id>
    <type>jpg</type>
    <width>450</width>
    <height>337</height>
######################################################################## 100.0%%
個人的にこれが激しく便利。

■APIをPOSTで叩いて怒られてみる
フォト蔵さんのphoto_list_public API はなにやらGETのみ対応らしいので
-d オプションを使って POST で叩いて怒られてみよう
$ curl '-#' 'http://api.photozou.jp/rest/photo_list_public' -d 'type=album&user_id=98953&album_id=224030' | head
<?xml version="1.0" encoding="UTF-8" ?>
<rsp stat="ok">
<info>
  <photo>
    <photo_id>2298762</photo_id>
    <user_id>98953</user_id>
    <album_id>224030</album_id>
    <type>jpg</type>
    <width>450</width>
    <height>337</height>
あれ、、怒られるかと思ったけど大丈夫みたい。

■ほんとにPOSTか詳しく見てみる
$ curl '-#' -v 'http://api.photozou.jp/rest/photo_list_public' -d 'type=album&user_id=98953&album_id=224030' | head
* About to connect() to api.photozou.jp port 80 (#0)
*   Trying 124.32.224.107... connected
* Connected to api.photozou.jp (124.32.224.107) port 80 (#0)
> POST /rest/photo_list_public HTTP/1.1
> User-Agent: curl/7.16.0 (i386-portbld-freebsd6.0) libcurl/7.16.0 OpenSSL/0.9.7e zlib/1.2.2
> Host: api.photozou.jp
> Accept: */*
> Content-Length: 40
> Content-Type: application/x-www-form-urlencoded
>
} [data not shown]
< HTTP/1.1 200 OK
< Date: Thu, 15 Feb 2007 17:01:23 GMT
< Server: Apache
< X-Powered-By: PHP/4.3.11
< Content-Type: text/xml; charset=UTF-8
< Transfer-Encoding: chunked
{ [data not shown]
<?xml version="1.0" encoding="UTF-8" ?>
<rsp stat="ok">
<info>
  <photo>
    <photo_id>2298762</photo_id>
    <user_id>98953</user_id>
    <album_id>224030</album_id>
    <type>jpg</type>
    <width>450</width>
    <height>337</height>

うむ、やっぱりPOSTで叩いてるっぽい。
どっちも対応してるのかな。



Comments

No comments yet

Add Comments

このアイテムは閉鎖されました。このアイテムへのコメントの追加、投票はできません。