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通信になりませんでした。
mursts様のご指摘で正常にpost通信ができる様になりました。
ありがとうございます!
post通信をさせる場合は
r = s.post(url, params=params)
部分でdetaに渡さなくてはなりません。
なので上記の部分を以下の通りに修正しました
r = s.post(url, data=params)
重ね重ねになりますが、ご指摘ありがとうございました!
ちなみにparamsの場合はget通信になる様です。
#!/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, data=params)
print r.text.encode("utf-8");
こちらの方が簡単に実装できるので、使えるならこっちの方が
よかったですね。
あ、requestsはインストールする必要があるので使う場合は以下のコマンドで
インストールしてください。
pip install requests
以上です。