アプリ担当の木村です。今回もPythonのお話です。
Pythonでの通信方法です。
get通信
サンプルコードはこんな感じです。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib
#送信先URL
url = "http://test.test"
#getパラメータ
param = [
( "id", 0),
( "param", "dammy"),
]
url += "?{0}".format( urllib.urlencode( param ) )
#API実行
result = None
try :
result = urllib.urlopen( url ).read()
except ValueError :
print "アクセスに失敗しました。"
ご覧の通り、
urlに送信するurlを
paramにgetパラメータを設定しています。
urllib.urlencode( param )
でurlのパラメータの形に変換しており結果
`http://test.test?id=0¶m=dammy`
こんな感じに変換されます。
post通信
初めはrequestsを使用する予定だったのですが、
うまく動作しなかったので、urllib、urllib2を使用することにしました。
サンプルコード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib
import urllib2
url = "http://test.test"
params = {"id":0, "param" : "dammy" }
params = urllib.urlencode(params)
req = urllib2.Request(url)
# ヘッダ設定
req.add_header('test', 'application/x-www-form-urlencoded')
# パラメータ設定
req.add_data(params)
res = urllib2.urlopen(req)
r = res.read()
print r
パラメータを
`urllib.urlencode( param )`
で変換させるところは変わらないですね。
`req.add_header('test', 'application/x-www-form-urlencoded')`
`req.add_data(params)`
でヘッダーとパラメータを設定しています。
ちなみにrequestsで行うとすると以下の様になるようです。
自分の環境ではCakePHPのwebサーバーに送ったのですが、
post通信になりませんでした。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
url = "http://test.test"
s = requests.session()
params = {"id":0, "param" : "dammy" }
r = s.post(url, params=params)
print r.text.encode("utf-8");
こちらの方が簡単に実装できるので、使えるならこっちの方がよかったです。
あ、requestsはインストールする必要があるので使う場合は以下のコマンドで
インストールしてください。
`pip install requests`
以上です。