暇なので勉強を、ということで ruby とか python とか勉強中。
管理しているサイトがさくらインターネットにあり、ライトプランなのですが、ライトプランでも ruby, python を使えると言うことでいろいろやってます。
やり始める前に比較ページとかいろいろ見ましたが、全部やってみればいいじゃねーか!と思い立ち WEB で使いそうな機能を同じように作ってどうなのよ?というところを検証しようとしています。
速度についてはインタープリターの進化でだいたい同じ所に収束すると勝手に思っているので、使い勝手中心での検証予定。
今日は主な機能を ruby でも python でも実装し終えたので、あとは perl で同じように実装してどうなのか作ったら結果をまとめて公表します。
で、今日書きたいのはPython [2.7] について一つ。
html から post でメッセージ出して、画像だけを出力する機能を試していたのですが、うまくいかない。ちなみに ruby は簡単でした。
よくある
print "Content-Type: text/html\n\n"
のところを image/png\n\n にしてもだめ。
これだけだと http ヘッダーに [なんたらかんたら: chunked] が出力される。Content-Length は無くても動くようですが、せっかくなので入れたい。
で、ファイルサイズ測って content-type の前に print すると今度は MIME が plain/text になってしまう。(以下のような感じ)
print "Content-Length...\n"
print "Content-type...\n\n"
一応何らかのデータは送られてきてはいるようだがうまくいかないので、Wireshark まで使っていろいろ調べました。
(つーかこんなもんまで使わせるなよ……疲れた)
で、最終的にできあがったのがこれ。
import os
stat=os.stat("test.png")
print "Content-Length: "+str(stat.st_size)+"\nContent-Type: image/png\n"
f=open("test.png","rb")
print f.read()
f.close()
ググると dor 関数とか使うものもヒットしますが、これだけで出力できました。
調査の最後の方はいろいろ調べていてあるコードを見たときに2行をまとめることを思い立ち、一行にしました。
ruby で同じことして正常に動く時のパケットと比較しながらいろいろ詰めていき、最終的に最後の \n は一つじゃないといけないということが判明。
0x0a が一つ余計でした。
苦労した割にはあまり使わないコードなのではと今更ながら思ってます。
img src="abc.rb"
とやってカウンターとかダミー画像とか出力する場合に使うくらいか?
とりあえずこれで動いた。Python 3.x 系は不明。
cgi ライブラリでいろいろ出力できる perl や ruby とは大違いだな……。
管理しているサイトがさくらインターネットにあり、ライトプランなのですが、ライトプランでも ruby, python を使えると言うことでいろいろやってます。
やり始める前に比較ページとかいろいろ見ましたが、全部やってみればいいじゃねーか!と思い立ち WEB で使いそうな機能を同じように作ってどうなのよ?というところを検証しようとしています。
速度についてはインタープリターの進化でだいたい同じ所に収束すると勝手に思っているので、使い勝手中心での検証予定。
今日は主な機能を ruby でも python でも実装し終えたので、あとは perl で同じように実装してどうなのか作ったら結果をまとめて公表します。
で、今日書きたいのはPython [2.7] について一つ。
html から post でメッセージ出して、画像だけを出力する機能を試していたのですが、うまくいかない。ちなみに ruby は簡単でした。
よくある
print "Content-Type: text/html\n\n"
のところを image/png\n\n にしてもだめ。
これだけだと http ヘッダーに [なんたらかんたら: chunked] が出力される。Content-Length は無くても動くようですが、せっかくなので入れたい。
で、ファイルサイズ測って content-type の前に print すると今度は MIME が plain/text になってしまう。(以下のような感じ)
print "Content-Length...\n"
print "Content-type...\n\n"
一応何らかのデータは送られてきてはいるようだがうまくいかないので、Wireshark まで使っていろいろ調べました。
(つーかこんなもんまで使わせるなよ……疲れた)
で、最終的にできあがったのがこれ。
import os
stat=os.stat("test.png")
print "Content-Length: "+str(stat.st_size)+"\nContent-Type: image/png\n"
f=open("test.png","rb")
print f.read()
f.close()
ググると dor 関数とか使うものもヒットしますが、これだけで出力できました。
調査の最後の方はいろいろ調べていてあるコードを見たときに2行をまとめることを思い立ち、一行にしました。
ruby で同じことして正常に動く時のパケットと比較しながらいろいろ詰めていき、最終的に最後の \n は一つじゃないといけないということが判明。
0x0a が一つ余計でした。
苦労した割にはあまり使わないコードなのではと今更ながら思ってます。
img src="abc.rb"
とやってカウンターとかダミー画像とか出力する場合に使うくらいか?
とりあえずこれで動いた。Python 3.x 系は不明。
cgi ライブラリでいろいろ出力できる perl や ruby とは大違いだな……。
最新の画像[もっと見る]
-
RDA-720 x 紙やすり は効果あり! rev2 8年前
-
Color munki x Argyll+DispCalGUI でモニターの再キャリブレート 9年前
-
Vaio TypeS 買いました 9年前
-
Intel520SSD のベンチ (Sony のばか……) 9年前
-
DDR3 x RAM DISK [Crystal Disk Benchmark] 9年前
-
QSOFT Ramdisk のベンチマーク 9年前
-
NASNE 死すべし。 9年前
-
RDA-720 購入したのでレビュー 概要編 9年前
-
Sony Tablet ICS と壁紙 9年前
-
SONY Tablet と壁紙テンプレート 10年前
「Weblog」カテゴリの最新記事
[xml] よく使う XML Schema 個人的まとめ
重複ファイルチェックアルゴリズム rev2
[angular.js] angular で xml を読み込んで動的に select-option を作成する
[.Net, COM] com の mshtml を扱うときにはまったこと
.Net Framework 更新後のもっさりを解消する
[.Net, Visual Studio] .Net Framework 4.5.1 と Visual Studio 2013 Express を入...
[Powershell, .Net] Powershell で sha256 ハッシュを取得する
[.Net, VisualStudio] xsd ファイルで日本語要素を記述する時の注意点
Intel Rapid Storage Technology 12.5 のインストールで注意
WAKWAK の正規表現迷惑メールフィルタが強力すぎる!
コメントを投稿