概要

Web ブラウザから Webサーバー側に画像ファイルなどの情報をアップロードする際には, ブラウザはHTTPのPOSTメソッド[1]を使っている。 Python[2]スクリプトからPOSTメソッドを使ってWebサーバに情報を送信する際は、 requestsモジュール[3]を使うのが一般的であり、また効率的でもある。

しかしながら、requestsモジュールはPython処理系の標準モジュールではなく、利用に際しては request モジュールを別途インストールする必要がある。 非標準のモジュールをインストールすることが困難あるいは望ましくないなどの理由で requestsモジュールが利用できない環境であってもHTTP POSTメソッドを使って画像などのファイルを web サーバーにアップロードしたいという場合も想定される。 従って、標準モジュールだけでHTTP POSTを実現したプログラムであれば、このような環境であっても 同じく利用できることになる。あとで見るように、これは可能であり、request モジュールを使った プログラムに比べてもそれほど複雑になることはない。この方法を知っておく事は、無駄にはならないだろう。 また、HTTP-POSTメソッドの仕組みを理解する上でも、一定の意味があるだろう。

ということで、reuqestモジュールに頼らず、 HTTP-POSTメソッドで画像ファイルをアップロードするPythonスクリプトを作ってみた。 このスクリプトは, 標準ライブラリである email モジュールおよび urllib モジュール(Python2.xでは urllibおよびurrlibモジュール)を使って、必要とされる機能を実現している。

この小文では、HTTP POSTメソッドについて、この小文を理解する上で必要な範囲で、簡単に解説する。 次に、requestsモジュールを使ったプログラムについて紹介する。 最後に、同等のスクリプトを標準モジュール( email.MIME, urllib[+urllib2] ) を使って 書き換えたスクリプトを示し、解説する。