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スクリプトを以下に示します。

ここからダウンロード

リスト 2 requestを用いた画像ファイルアップローダ用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ページを読み込むのと同じ位に簡単なことになっています。