Python requests module¶
Python requestsモジュールはPythonスクリプト中からWebサーバへの通信を 行うためのモジュールです。requestsの作者はこのモジュールを"HTTP for Humans™"と呼んでいます。 その呼び方の通りに、標準ライブラリであるurllib(Python3), urllib/urllib2(Python2)に比べ、 格段に使い易いライブラリとなっています1。
- 1
標準外のライブラリでにはurllib3というのもあり、こちらもurllib/urllib2を補完する機能を提供してくれます。
reuquestsモジュールの使い方¶
前節「HTTP POST メソッド」のmultipart/form-dataを用いたPOST リクエストを, requestsモジュールを使って構築し、 webサーバーに送信するPythonスクリプトを以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #!python
#-*- coding:utf-8 -*-
import sys,os.path
import getpass
import time,urllib2,os.path
import requests
def UploadScrShot(f,title):
#check if file named f exists
if not os.path.isfile(f):
raise RuntimeError("file %s does not exist"%f)
ts=time.localtime()
url = 'http://webserver.xxx.yyy/ScrShot/upload.php'
raw_params = dict(year="%4d"%ts.tm_year,
month="%02d"%ts.tm_mon,
day="%02d"%ts.tm_mday,
)
fext=os.path.splitext(f)[1][1:]
UserFile=os.path.split(f)[0]
files={'UserFile':(
"imagefile.png",
open(f,"rb"),
"image/%s"%fext
)
}
try:
s=requests.Session()
page=s.post(
url,
data=raw_params,
files=files,
proxies={ "http":"" }
)
return page
except:
raise
|
form-dataとして渡す(バイナリデータ以外の)パラメータは、pythonの辞書型(dict)データとして用意します('raw_params')。 画像データとして渡すデーターは、("ファイル名", <バイナリデータ>, <画像のタイプを示すContent-type>)を値とする辞書型データの形で用意します('files' )。 これら用意されたパラメータを requests の Session クラスのインスタンスの post メソッドに 送信先のwebサーバの'url'と共に与えることで、POSTリクエストが送信されます。 戻り値(page)を見ることで、送信の結果が成功であったか、 失敗であったかを知ることができます。 この例では、デフォルトで指定されている HTTP プロキシを無視するために、proxies パラメータを指定しています。
このように、requests モジュールを使ってファイルを用いてバイナリデータを送信することは、 HTTP GETメソッドを使ってwebページを読み込むのと同じ位に簡単なことになっています。