Edited at

Pythonでのget,post通信メモ

More than 3 years have passed since last update.

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&param=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

以上です。