アプリ担当の木村です。今回も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`
以上です。