Azure のストレージは、REST API が用意されているみたい。
http://msdn.microsoft.com/en-us/library/dd179355.aspx
そこで、直接このAPI達を使ってみて、Azure ストレージをちょっとだけ詳しくなろうと試みてみた…
まずは何も考えずに、blob の List Containers API の URL をブラウザでアクセス。

まあ予想通りエラーです。
さきほどの MSDN を眺めてみると…下のほうにサンプルが…
GET http://myaccount.blob.core.windows.net/?comp=list&maxresults=3 HTTP/1.1
x-ms-version: 2009-09-19
x-ms-date: Sun, 27 Sep 2009 22:08:44 GMT
Authorization: SharedKey myaccount:CY1OP3O3jGFpYFbTCBimLn0Xov0vt0khH/D5Gy0fXvg=
とりあえず、サンプルを今回アクセスするストレージに合うように書き換えて、
Authorization はよくわからんので消して、TCP 送信ソフトで送信してみた。
あれ…リクエストが返ってこない…
それから1時間格闘の末、HTTPヘッダの最後に空行を入れないといけない駄目という事がわかった…
(うち、ネットワーク弱いな…)
ということで、以下のリクエストを投げてみる。(****はストレージアカウント名)
[HTTP リクエスト]
GET http://****.blob.core.windows.net/?comp=list&maxresults=3 HTTP/1.1
x-ms-version: 2009-09-19
x-ms-date: Tue, 12 Jul 2011 13:10:38 GMT
<空行>
なんか返ってきた!
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Tue, 12 Jul 2011 13:40:02 GMT
Connection: close
Content-Length: 334
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>
あれ? HTTP/1.1 400 Bad Request ってなんだ…
無効なホスト名って言われてる…
さらに30分…
どうやら、HTTP/1.1 では、Host ヘッダが必要みたい。
で Host ヘッダをつけて送信。
[HTTP リクエスト]
GET http://****.blob.core.windows.net/?comp=list&maxresults=3 HTTP/1.1
Host: ****.blob.core.windows.net
x-ms-version: 2009-09-19
x-ms-date: Tue, 12 Jul 2011 13:10:38 GMT
[レスポンス]
HTTP/1.1 404 The specified resource does not exist.
Content-Length: 223
Content-Type: application/xml
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 8c77457c-e991-4c54-9b27-5d30eb854811
x-ms-version: 2009-09-19
Date: Tue, 12 Jul 2011 13:44:34 GMT
<?xml version="1.0" encoding="utf-8"?><Error><Code>ResourceNotFound</Code><Message>The specified resource does not exist.
RequestId:8c77457c-e991-4c54-9b27-5d30eb854811
Time:2011-07-12T13:44:34.9547433Z</Message></Error>
ブラウザでアクセスしたときと同じ内容だ!
これでブラウザに並んだぜ。
で、消してた Authorization ヘッダをつけてみるが…
Authorization: SharedKey myaccount:CY1OP3O3jGFpYFbTCBimLn0Xov0vt0khH/D5Gy0fXvg=
myaccount 部分はストレージアカウント名で良いとして…
CY1OP3O3jGFpYFbTCBimLn0Xov0vt0khH/D5Gy0fXvg= の部分はどうすればいいんだ?
そこでいろいろと調べてみたら、参考になりそうなサイトを見つけた。
■てすとぶろぐ さん
・Azure Storage 関係の REST API で利用する Authorization ヘッダ
http://blogahf.blogspot.com/2011/05/azure-storage-rest-api-authorization.html
・Azure Storage REST API の Authorization ヘッダ・改訂版
http://blogahf.blogspot.com/2011/05/azure-storage-rest-api-authorization_25.html
■REST API でBlob 操作 - Azureの小ネタ
http://d.hatena.ne.jp/StateMachine/20110405/1302014188
どうやら、HTTPヘッダの内容に、SHA256ハッシュとBASE64で認証キーを作り、
それを指定するようだ…
で、頑張って作成してアクセス…
[HTTPリクエスト]
GET http://****.blob.core.windows.net/?comp=list&maxresults=3 HTTP/1.1
Host: ****.blob.core.windows.net
x-ms-version: 2009-09-19
x-ms-date: Tue, 12 Jul 2011 13:10:38 GMT
Authorization: SharedKeyLite ****: 7XJc+dO+3uN+ZynDbxRTK4bC4N7UIPhXgN/wedHv50E=
[レスポンス]
HTTP/1.1 400 Authentication information is not given in the correct format. Check the value of Authorization header.
Content-Length: 297
Content-Type: application/xml
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: e2116cae-c135-497d-8113-dfa7b72c943f
Date: Tue, 12 Jul 2011 13:58:20 GMT
<?xml version="1.0" encoding="utf-8"?><Error><Code>InvalidAuthenticationInfo</Code><Message>Authentication information is not given in the correct format. Check the value of Authorization header.
RequestId:e2116cae-c135-497d-8113-dfa7b72c943f
Time:2011-07-12T13:58:20.3896662Z</Message></Error>
なんか認証キーが違う言われた…
認証キーはプログラム組んで作成させないと難しそうだ…
次回は、認証キーを作るプログラム作りで行こう。