2017/01/24

[Python][Google App Engine]urllib2を使ってmultipart/form-data送信をする

twitterに画像付きツイートをするにあたって、multipart/form-data送信をする必要があり、
requestsライブラリを自前でインストールする必要性があり、既存のパッケージでできないのかなーっと
探していたら、urllib2を使って送信する方法を見つけました。

urllib2のみでmultipart/form-dataを送る

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2

url = r"http://test.example.com/path/to/form"
boundary = u"--------python"
encoding = "utf-8"

# formの内容の辞書
form_dict = dict(user=u"hoge", pass=u"日本語もおk")

# form_dict辞書内の要素数だけ区切り線で分けたbodyを作る
def multipart_formdata(form_dict):
    disposition = u'Content-Disposition: form-data; name="%s"'
    lines = []
    for k, v in form_dict.iteritems():
        lines.append(u'--' + boundary)
        lines.append(disposition % k)
        lines.append(u'')
        lines.append(v)
    lines.append(u"--" + boundary + u"--")
    lines.append(u'')
    value = u"\r\n".join(lines)
    return value.encode(encoding)

# ヘッダにContent-Typeを指定
def request_with_multipart_formdata():
    req = urllib2.Request(url)
    req.add_header("Content-Type","multipart/form-data; boundary=%s" % boundary.encode(encoding))

    data = multipart_formdata(form_dict)
    conn = urllib2.urlopen(req, data)
同エントリーでは、euc-jpでエンコードされていましたが、utf-8ベースでutf-8エンコード。

0 コメント:

コメントを投稿